Merge branch 'master' of https://github.com/haerong22/Study
This commit is contained in:
@@ -32,6 +32,7 @@ dependencies {
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j'
|
||||
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.example.userservice.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<Resilience4JCircuitBreakerFactory> 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()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,8 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.modelmapper.ModelMapper;
|
||||
import org.modelmapper.convention.MatchingStrategies;
|
||||
import org.springframework.cloud.client.circuitbreaker.CircuitBreaker;
|
||||
import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
@@ -31,6 +33,7 @@ public class UserServiceImpl implements UserService {
|
||||
private final Environment env;
|
||||
private final RestTemplate restTemplate;
|
||||
private final OrderServiceClient orderServiceClient;
|
||||
private final CircuitBreakerFactory circuitBreakerFactory;
|
||||
|
||||
private final ModelMapper mapper = new ModelMapper();
|
||||
|
||||
@@ -66,7 +69,16 @@ public class UserServiceImpl implements UserService {
|
||||
/**
|
||||
* feign client
|
||||
*/
|
||||
List<ResponseOrder> orderList = orderServiceClient.getOrders(userId);
|
||||
// List<ResponseOrder> orderList = orderServiceClient.getOrders(userId);
|
||||
|
||||
/**
|
||||
* circuit breaker
|
||||
*/
|
||||
CircuitBreaker circuitbreaker = circuitBreakerFactory.create("circuitbreaker");
|
||||
List<ResponseOrder> orderList = circuitbreaker.run(
|
||||
() -> orderServiceClient.getOrders(userId),
|
||||
throwable -> new ArrayList<>()
|
||||
);
|
||||
|
||||
userDto.setOrders(orderList);
|
||||
return userDto;
|
||||
|
||||
@@ -25,6 +25,7 @@ spring:
|
||||
|
||||
eureka:
|
||||
instance:
|
||||
hostname: localhost
|
||||
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
|
||||
client:
|
||||
register-with-eureka: true
|
||||
|
||||
Reference in New Issue
Block a user