본문 바로가기
Spring

SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시리즈 (4-2) - CircuitBreaker 설정방법

by devLog by Ronnie's 2022. 7. 7.

들어가며


지난 시간에는 CircuitBreaker 개념에 대해서 알아보았고 이번 시간에는 설정 방법과 테스트에 대해 정리한다. 

 

시리즈 1 - MSA

https://sjparkk-dev1og.tistory.com/151

 

MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시리즈 (1) - MSA(Mi

들어가며 이 글은 제목에서도 알 수 있듯이 MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 순으로 개념과 설정방법 그리고 테스트 등의 결과와 해당 기술들을 테스트하며 겪었..

sjparkk-dev1og.tistory.com

시리즈 2 - Eureka

https://sjparkk-dev1og.tistory.com/153

 

SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시

들어가며 이번 시간에는 유레카에 대해서 정리한다. 기본적인 개념 정리와 테스트에 대핸 내용을 정리했다. 시리즈 1 - MSA https://sjparkk-dev1og.tistory.com/151 MSA & Eureka & FeignClient(OpenFeign) & Cir..

sjparkk-dev1og.tistory.com

시리즈 3 - OpenFeign

https://sjparkk-dev1og.tistory.com/155

 

SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시

들어가며 이번 시간에는 OpenFeign 개념 및 설정 방법과 테스트에 대해 정리한다. Feign Client 통신을 위한 OpenFeign 라이브러리를 사용했다. 시리즈 1 - MSA https://sjparkk-dev1og.tistory.com/151 MSA & Eur..

sjparkk-dev1og.tistory.com

시리즈 4 - Circuit Breaker 패턴 개념

https://sjparkk-dev1og.tistory.com/157

 

SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시

들어가며 이번 시간에는 CircuitBreaker 개념 및 설정 방법과 테스트에 대해 정리한다. 내용이 길어서 4-1에서는 개념에 대해서 정리를 하고 4-2에서 설정방법에 대해서 정리한다. 시리즈 1 - MSA https://

sjparkk-dev1og.tistory.com

 

 

서킷브레이커 Resilience4J 설정 방법


1. 의존성 추가

 

implementation("org.springframework.boot:spring-boot-starter-aop")

implementation("io.github.resilience4j:resilience4j-spring-boot2:1.7.0")

implementation("io.github.resilience4j:resilience4j-reactor:1.7.0")

 

2. Config or application.yml 설정중 1

 

- Config

- yml

** detail한 exception 설정을 위해 config 방법 권장, yml 설정 시 주의점은 CircuitBreaker 자체가 Bean으로 등록되지 않는다. Spring Bean에 등록되는 것은 CircuitBreakerRegistry뿐이며 서킷브레이커 객체를 이용하기 위해서는 registry에서 직접 꺼내줘야한다.

 

3. CircuitBreaker 서비스 정의해주기

 

  • 서킷브레이커 패턴을 적용할 서비스에 @CircuitBreaker 어노테이션 적용 및 옵션값 설정
  • name 은 config에 설정한 circuitBreaker name과 동일하게 설정, yml이라면 instances 하위 name을 적어준다.
  • fallbackMethod에는 해당 서비스에서 익셉션이 발생했을시 실행될 메서드명을 입력해준다.

4. 테스트 로그 확인

 

먼저 모든 애플리케이션을 실행한다. 이후 테스트를 위해 slidingWindow 값을 5 설정한다. 스토어 1번이 나오도록 설정된 API 5 요청을 보내면 아래와 같이 Exception 발생하게 되며 이후 요청으로는 CallNotPermiitedException 발생하여 호출을 막게된다. 

이렇게 되면 기존에 CLOSED 상태였던게 OPEN으로 상태가 변하게 되고 시간이 지나면 HALF_OPEN 상태로 바뀌게 되고 이후 다시 서킷을 열지 닫을지 판단하게 됩니다. 

 

 

추가 사항


아래 옵션값들의 설정에 따라 다양하게 설정이 가능하다.

  • name: 서킷브레이커의 이름
  • failureRateThreshold: 실패 비율의 임계치
  • slowCallRateThreshold: 느린 호출의 임계치
  • slowCallDurationThreshold: 느린 호출로 간주할 시간 값
  • slidingWindowType: 서킷브레이커의 타입을 지정한다. TIME_BASED, COUNT_BASED 중 택 1
  • slidingWindowSize: 시간은 단위 초, 카운트는 단위 요청 수
  • minimumNumberOfCalls: 총 집계가 유효해 지는 최소한의 요청 수. 이 값이 1000이라면 999번 실패해도 서킷브레이커는 상태변이가 일어나지 않는다.
  • waitDurationInOpenState: OPEN에서 HALF_OPEN으로 상태변이가 실행되는 최소 대기 시간
  • permittedNumberOfCallsInHalfOpenState: HALF_OPEN 상태에서 총 집계가 유효해지는 최소한의 요청 수. COUNT_BASED로 slidingWindowType이 고정되어 있다.
  • automaticTransition: true라면 waitDurationInOpenState로 지정한 시간이 지났을 때 새로운 요청이 들어오지 않아도 자동으로 HALF_OPEN으로 상태변이가 발생한다.
  • ignoreExceptions: 해당 값에 기재한 exception은 모두 실패로 집계하지 않는다.
  • recordExceptions: 해당 값에 기재한 exception 모두 실패로 집계한다.

 

더 자세한 설정 정보는 아래 공식 문서를 참고

 

https://resilience4j.readme.io/docs/circuitbreaker

 

CircuitBreaker

Getting started with resilience4j-circuitbreaker

resilience4j.readme.io

 

댓글