Circuit Breaker Pattern 적용
in Spring on Spring Boot
Circuit Breaker Pattern 적용
@CircuitBreaker
오늘은 애노테이션 기반으로 Circuit Breaker를 적용해보는 시간을 가졌다.
@GetMapping("/")
@CircuitBreaker(name = "", fallBackMehtod = "")
public void testMethod() {
    //...
}

@CircuitBreaker에는 name, fallbackMethod 두 가지 속성을 설정할 수 있다.
- name : circuit breaker의 이름
- fallbackMethod : 요청이 실패했을 때 호출할 콜백 메소드명.
두개의 프로젝트 만들기
Project A
@RestController
@RequestMapping("/a")
public class ServiceAController {
    @Autowired
    private RestTemplate restTemplate;
    private static final String BASE_URL = "http://localhost:8081/";
    private static final String SERVICE_A = "serviceA";
    @GetMapping
    @CircuitBreaker(name = SERVICE_A, fallbackMethod = "serviceAFallback")
    public String serviceA() {
        String url = BASE_URL + "b";
        return restTemplate.getForObject(
                url,
                String.class
        );
    }
    public String serviceAFallback(Exception e) {
        return "This is a fallback method for Service A";
    }
}
resilience4j:
  circuitbreaker:
    instances:
      serviceA:
        registerHealthIndicator: true   
        eventConsumerBufferSize: 10
        failureRateThreshold: 50
        minimumNumberOfCalls: 5
        automaticTransitionFromOpenToHalfOpenEnabled: true
        waitDurationInOpenState: 5s
        permittedNumberOfCallsInHalfOpenState: 3
        slidingWindowSize: 10
        slidingWindowType: COUNT_BASED
▶︎ 설정 정보에 대한 설명
  Project B
@RestController
@RequestMapping("/b")
public class ServiceBController {
    @GetMapping("")
    public String serviceB() {
        return "Service B is called from Service A";
    }
}
요청 Test
| ServerA 상태 | ServerB 상태 | 결과 | 
|---|---|---|
| Up | Up | “Service B is called from Service A” | 
| Up | Down | “This is a fallback method for Service A” | 
ServerB가 내려갔을 때 ServerA에서 설정해둔 FallbackMethod가 실행됨을 확인할 수 있었다.
참고 블로그 및 영상
▶︎ Youtube 강의 
 
