From 9a4c8c9fc55f6faf6c856137f27b4c6f9e7eaa4c Mon Sep 17 00:00:00 2001 From: kamothi Date: Tue, 10 Sep 2024 17:34:04 +0900 Subject: [PATCH 1/5] =?UTF-8?q?Add:=20feign=20&=20circuitBreaker=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 8e385ce..7710c68 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,8 @@ dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-config' implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' + implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j' + implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' From 6f21e595a8a53f77b236be5d41f5a3ea61ae9a35 Mon Sep 17 00:00:00 2001 From: kamothi Date: Tue, 10 Sep 2024 17:34:50 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20CircuitBreaker=20config=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ku/user/config/Resilience4JConfig.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/ku/user/config/Resilience4JConfig.java diff --git a/src/main/java/ku/user/config/Resilience4JConfig.java b/src/main/java/ku/user/config/Resilience4JConfig.java new file mode 100644 index 0000000..51f6b45 --- /dev/null +++ b/src/main/java/ku/user/config/Resilience4JConfig.java @@ -0,0 +1,35 @@ +package ku.user.config; + +import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; +import io.github.resilience4j.timelimiter.TimeLimiterConfig; +import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JCircuitBreakerFactory; +import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder; +import org.springframework.cloud.client.circuitbreaker.Customizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.time.Duration; + +@Configuration +public class Resilience4JConfig { + @Bean + public Customizer globalCustomConfiguration(){ + CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() + .failureRateThreshold(4) + .waitDurationInOpenState(Duration.ofMillis(1000)) + .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED) + .slidingWindowSize(2) + .build(); + + TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom() + .timeoutDuration(Duration.ofSeconds(4)) + .build(); + + + return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id) + .timeLimiterConfig(timeLimiterConfig) + .circuitBreakerConfig(circuitBreakerConfig) + .build() + ); + } +} From 2e67c7ce5b92436d450c6bf9eab90e4d50defb76 Mon Sep 17 00:00:00 2001 From: kamothi Date: Tue, 10 Sep 2024 17:38:49 +0900 Subject: [PATCH 3/5] =?UTF-8?q?Add:=20feign=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ku/user/UserApplication.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/ku/user/UserApplication.java b/src/main/java/ku/user/UserApplication.java index e47546c..0235401 100644 --- a/src/main/java/ku/user/UserApplication.java +++ b/src/main/java/ku/user/UserApplication.java @@ -2,8 +2,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication +@EnableDiscoveryClient +@EnableFeignClients public class UserApplication { public static void main(String[] args) { From 8beaa432420396a193a02ab4240b6fdd51f909cd Mon Sep 17 00:00:00 2001 From: kamothi Date: Tue, 10 Sep 2024 17:39:24 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20GameService=20feign=20interface=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ku/user/client/GameServiceClient.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/ku/user/client/GameServiceClient.java diff --git a/src/main/java/ku/user/client/GameServiceClient.java b/src/main/java/ku/user/client/GameServiceClient.java new file mode 100644 index 0000000..ac4c75b --- /dev/null +++ b/src/main/java/ku/user/client/GameServiceClient.java @@ -0,0 +1,11 @@ +package ku.user.client; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name="game-service") +public interface GameServiceClient { + @GetMapping("/game-service/{userId}/games") + String getGameResults(@PathVariable String userId); +} From 9d503c96fcfb1d3c076ff41d96353e57abbed9f0 Mon Sep 17 00:00:00 2001 From: kamothi Date: Sun, 15 Sep 2024 18:08:09 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20actuator=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ src/main/resources/application.yml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/build.gradle b/build.gradle index 7710c68..7139d35 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,8 @@ dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j' implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'io.micrometer:micrometer-registry-prometheus' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b70b3d3..f1582e6 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -73,6 +73,12 @@ logging: level: root: info +management: + endpoints: + web: + exposure: + include: prometheus + token: expiration_time: 86400000 secret: ${SECRET}