Riot API Circuit Breaker 적용
Riot API Limit을 보면 
이렇게 Rate Limit이 있다고 설명되어 있는데요.
이를 위해서 CustomCircuitBreaker를 아래와 같이 개발해봤습니다.
@Bean(name = "shortTermCircuitBreaker")
public CircuitBreaker shortTermCircuitBreaker(CircuitBreakerRegistry registry) {
return registry.circuitBreaker("shortTermBreaker",
CircuitBreakerConfig.custom()
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)
.failureRateThreshold(1)
.slidingWindowSize(1)
.waitDurationInOpenState(Duration.ofSeconds(1)) // open -> half open까지 기다리는 시간
.automaticTransitionFromOpenToHalfOpenEnabled(true) // open 상태에서 자동으로 half open으로 전환
.build()
);
}
@Bean(name = "longTermCircuitBreaker")
public CircuitBreaker longTermCircuitBreaker(CircuitBreakerRegistry registry) {
return registry.circuitBreaker("longTermBreaker",
CircuitBreakerConfig.custom()
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)
.failureRateThreshold(1)
.slidingWindowSize(120)
.waitDurationInOpenState(Duration.ofMinutes(2)) // open -> half open까지 기다리는 시간
.automaticTransitionFromOpenToHalfOpenEnabled(true) // open 상태에서 자동으로 half open으로 전환
.build()
);
}
제가 궁금한 점은 slidingWindowType을 TIME_BASED로 했을 경우, slidingWindowSize에 들어가는 값의 단위가 초 단위인가 하는 것입니다.
공식 문서에는 
이렇게 나와있는데 애매한 것 같아서요.
Answer 2
1
백종인님 안녕하세요~
찾아보신 것처럼, slidingWindowSize에 있는 값은 seconds가 맞습니다.
잘 찾아보셨어요.
그런데 질문과는 별개로, Riot API Limit에 나와있는 내용은 서킷브레이커보다는 Rate Limiter(https://resilience4j.readme.io/docs/ratelimiter)로 구현하는게 더 적절해보입니다. 서킷브레이커는 부하, 오류 상황으로부터 시스템을 지키는 목적이지 호출 횟수를 제한하려는 목적은 아닙니다. 물론 서킷브레이커로도 구현하신 것처럼 비슷하게 구현은 할 수 있을겁니다. 그러나 조금만 커스터마이징을 하려고 해도 로직을 직접 구현해주셔야해요. 아마 Rate Limiter로 개발하시면 이런 부분이 이미 구현되어있을겁니다.
아무튼 질문 주셔서 감사하고, 혹시 또 궁금한 내용 있으면 질문 남겨주세요~
1


CircuitBreaker 내부 코드를 확인해본 결과 TIME_BASED일 경우 slidingWindowSize에 들어가는 데이터가 Seconds 단위로 들어가는 것 같은데 제가 제대로 확인한게 맞을까요?
미션 진행 방식에 대한 질문입니다.
0
16
1
지금 강의가 어려우신분 추천드립니다.
0
43
1
getOrCreate / Unique? 멱등 처리 질문
1
54
2
기존의 완성된 CRUD의 Build.gradle에 security관련 dependency를 추가하면 문제가 생깁니다.
0
56
2
파킹 페이지와 대기열 큐 질문입니다.
0
37
1
조회 메서드에서 @Transactional(readOnly=true) 질문
1
38
1
EmailSender 관련 문의
0
45
1
CRA ? 질문입니다
0
46
1
[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.
0
45
1
[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.
0
83
6
현업에서 서킷브레이커 상태 전파를 할 때 Actuator를 사용 하시는지 궁금합니다!
1
145
1
recordException을 지정하지 않았을때 동작 방식 질문
0
205
3
Resilience4J 적절한 적용 예시인지 질문드립니다.
1
254
1
강의 자료 문의
1
362
2
scale out 환경에서 api 호출로 circuit 상태 변경하기
1
338
1
예외 선언 위치
0
316
1
Circuitbreaker 사용 주체
1
276
1
Retry 사용
1
295
1
slow call 관련 옵션을 무시할 수 있나요?
1
260
1
n 대의 서버간 서킷 브레이커의 상태를 동기화 시키려면 어떻게 해야 될까요?
1
577
1
안녕하세요 강사님 질문있습니다!
1
335
2
컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문
1
555
2
Circuit Breaker의 적용처 판단
1
484
2
IgnoreException 동작이 주석의 설명과 좀 다른것같습니다
1
412
1

