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 강의