Resilience4j는 경량화돼있고, Netflix Hystrix를 대신해서 fault tolerance library 역할을 한다.
fault tolerance란 에러가 발생하더라도 정상적인 서비스처럼가용할 수 있는 능력을 말한다.
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.clound</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration(){
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
//CircuitBreaker를 열지 결정하는 Failure Rate
.failureRateThreshold(4)
//CircuitBreaker를 open한 상태를 유지하는 지속 시간
.waitDurationInOpenState(Duration.ofMillis(1000))
//CircuitBreaker가 닫힐 때 결과를 기록하는 데 사용되는 슬라이딩 창의 유형을 구성
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
//CircuitBreaker가 닫힐 때 호출 결과를 기록하는 데 사용되는 슬라이딩 창의 크기를 구성
.slidingWindowSize(2)
.build();
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4))
.build();
return factory -> factory.configureDefauilt(id -> new Resilience4JConfigBuilder(id)
.timeLimiterConfig(timeLimiterConfig)
.circuitBreakerConfig(circuitBreakerConfig)
.build();
}
CircuitBreaker circuitBreaker = ciccuitBreakerFactory.create("circuitbreaker");
List<ResponseOrder> ordersList = circuitBreaker.run(() -> orderServiceClient.getOrders(userId),
throwable -> new ArrayList<>());