작성
·
511
1
안녕하세요.
강의 잘 듣고 있습니다.
예제에서 Resilience4jConfig를 통해 CircuitBreaker에 대한 설정을 하여 사용하는 것으로 확인을 했습니다.
MSA를 연동하는 서비스에 따라 CircuitBreaker에 대한 설정 값을 다르게하여 복수개를 사용하는 경우도 있을 것 같은데, 이럴 경우 Resilience4JConfig에 대한 Bean 등록과 Config 를 어떻게 잡으면 될까요?
감사합니다.
답변 1
4
안녕하세요, 이도원입니다.
문의하신 작업은 여러개의 Customizer<Resilience4JCircuitBreakerFactory>를 등록함으로써 가능합니다.
기존에 만든 Resilience4JConfig 파일에 CircuitBreakerFactory를 아래와 같이 여러 개 등록하실 수 있습니다.
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> specificCustomConfiguration1() {
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(6).waitDurationInOpenState(Duration.ofMillis(1000))
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.slidingWindowSize(3).build();
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4)).build();
return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig).build(), "circuitBreaker1");
}
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> specificCustomConfiguration2() {
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(8).waitDurationInOpenState(Duration.ofMillis(1000))
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.slidingWindowSize(4).build();
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4)).build();
return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig).build(),
"circuitBreaker2");
}
위 코드를 보시면, CircuitBreakerFactory를 circuitBreaker1, circuitBreaker2 로 등록한 것을 보실 수있습니다. 각각 다른 설정을 가지고 생성되었으면, UserServiceImpl.java 에서 사용하실 때는
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitBreaker1");
CircuitBreaker circuitBreaker2 = circuitBreakerFactory.create("circuitBreaker2");
위와 같이 create() 함수에서 등록한 ID(circuitBreaker1, circuitBreaker2)를 이용하여 CircuitBreaker 객체를 생성하실 수 있습니다.
감사합니다.