포스트

Circuit Breaker Pattern 적용

Circuit Breaker Pattern 적용

Circuit Breaker Pattern 적용


@CircuitBreaker

오늘은 애노테이션 기반으로 Circuit Breaker를 적용해보는 시간을 가졌다.

1
2
3
4
5
@GetMapping("/")
@CircuitBreaker(name = "", fallBackMehtod = "")
public void testMethod() {
    //...
}

@CircuitBreaker에는 name, fallbackMethod 두 가지 속성을 설정할 수 있다.

  • name : circuit breaker의 이름
  • fallbackMethod : 요청이 실패했을 때 호출할 콜백 메소드명.


두개의 프로젝트 만들기

Project A


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@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";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
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


1
2
3
4
5
6
7
8
9
10
@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 강의

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.