본문 바로가기
카테고리 없음

Resilience4j

by 밍상 2022. 6. 17.

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<>());