implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j'
resilience4j.circuitbreaker:
instances:
parkingClientCircuitBreaker:
registerHealthIndicator: true
slidingWindowSize: 10
minimumNumberOfCalls: 5
permittedNumberOfCallsInHalfOpenState: 3
automaticTransitionFromOpenToHalfOpenEnabled: true
waitDurationInOpenState: 10s
failureRateThreshold: 50
eventConsumerBufferSize: 10
OPEN
이라면서킷 브레이커가 실패율을 계산하기 위해 고려하는 호출의 수를 말한다.
이 값은 서킷 브레이커가 내부적으로 유지하는 링 버퍼의 크기를 결정한다.
- 예를들어, 5
으로 설정된 경우
1. 성공
2. 성공
3. 실패
4. 실패
5. 성공
이라면 총 5번중에 2번의 호출의 실패가 발생했기에, 실패율은 40% 가 된다.
- 해당 임계값을 초과하면 서킷 브레이커는 `OPEN` 상태가 된다.
💡 링버퍼
서킷 브레이커가 내부적으로 사용하는 데이터 구조다.
고정된 크기
새로운 요소가 추가되는 경우 가장 오래된 요소를 덮어쓰는 방식으로 동작
반개방(Half-Open) 상태일 때
허용되는 호출 수입니다.실패율의 임계값
입니다.50
임계값 설저시OPEN
10
으로 설정한 경우Resilience4J
관련 yml 파일을 자바 파일로 설정한다면!@Configuration
public class AddressApiOpenFeignConfig {
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.custom()
.slidingWindowSize(10)
.minimumNumberOfCalls(5)
.permittedNumberOfCallsInHalfOpenState(3)
.automaticTransitionFromOpenToHalfOpenEnabled(true)
.waitDurationInOpenState(Duration.ofSeconds(10))
.failureRateThreshold(50)
.recordException(e -> true)
.build()
)
.timeLimiterConfig(
TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build()
)
.build());
}
}
@FeignClient(name = "AddressApiOpenFeign", url = "${juso.url}", configuration = AddressApiOpenFeignConfig.class)
public interface AddressApiOpenFeign {
@GetMapping
AddressResponseDto getAddress(
@RequestParam("confmKey") String confmKey,
@RequestParam(value = "currentPage", defaultValue = "1") String currentPage,
@RequestParam(value = "countPerPage", defaultValue = "10") String countPerPage,
@RequestParam("keyword") String keyword,
@RequestParam(value = "resultType", defaultValue = "json") String resultType
);
}