일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- it
- db
- tool
- php
- ubuntu
- Design Patterns
- 요리
- devops
- elasticsearch
- laravel
- IntelliJ
- jsp
- 맛집
- Git
- Spring Batch
- JVM
- springboot
- Spring
- javascript
- ReactJS
- MySQL
- AWS
- Oracle
- jenkins
- java
- Gradle
- Spring Boot
- linux
- redis
- Web Server
Archives
- Today
- Total
아무거나
서킷브레이커(=Circuitbreaker) Resilience4j 적용 (Java + Spring Boot) 2편 본문
Java & Kotlin/Spring
서킷브레이커(=Circuitbreaker) Resilience4j 적용 (Java + Spring Boot) 2편
전봉근 2022. 7. 8. 16:42반응형
해당 포스팅은 1편인 이전 포스팅인 https://bkjeon1614.tistory.com/711을 참고하여 사전작업 후 진행하는것이 좋다. (모니터링 하는 방법에 대해서만 설명이 나오기 때문)
서킷브레이커 테스트를 위한 코드수정
먼저 모니터링을 위하여 https://bkjeon1614.tistory.com/711 의 CircuitBreakerService.java
코드를 일부 변경하자.
[CircuitBreakerService.java]
import java.util.Random;
import org.springframework.stereotype.Service;
import com.example.bkjeon.constants.Resilience4jCode;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class CircuitBreakerService {
@CircuitBreaker(name = Resilience4jCode.CIRCUIT_TEST_70000, fallbackMethod = "getCircuitBreakerFallback")
public String getCircuitBreaker() {
runtimeException();
return "hello world!";
}
private void runtimeException() {
// as-is
// throw new RuntimeException("failed");
// to-be
int randomInt = new Random().nextInt(10);
if(randomInt <= 7) {
throw new RuntimeException("failed");
}
}
private String getCircuitBreakerFallback(Throwable t) {
return "getCircuitBreakerFallback! exception type: " + t.getClass() + "exception, message: " + t.getMessage();
}
@Retry(name = Resilience4jCode.RETRY_TEST_3000 , fallbackMethod = "getRetryFallback")
public String getRetry() {
log.info("=============== getRetry Request !!");
runtimeException();
return "hello world!";
}
private String getRetryFallback(Throwable t) {
return "getRetryFallback! exception type: " + t.getClass() + "exception, message: " + t.getMessage();
}
}
모니터링을 위한 설정파일 수정
- application.yml 수정
[application.yml]... resilience4j: resilience4j: retry: configs: default: registerHealthIndicator: true # actuator 정보 노출을 위한 설정 ... circuitbreaker: configs: default: registerHealthIndicator: true # actuator 정보 노출을 위한 설정 ... # actuator management: endpoint: health: show-details: always endpoints: web: exposure: include: - "*" # 테스트를 위해 actuator 전체 노출 health: circuitbreakers: enabled: true # circuitbreakers 정보 노출 retryevents: enabled: true # retryevents 정보 노출
Actuator 를 통한 모니터링
- {domain}/actuator/health 을 통하여 상태를 확인할 수 있다. (서킷의 status or state 로 상태를 확인할 수 있다. 자세한 로그를 보려면 하기 내용을 참고하자.)
- {domain}/actuator 다양한 모니터링 endpoint 목록 확인
각 모듈의 모니터링 로그 확인 -> 상세 로그 확인 시 (Ex - Retry, Circuitbreaker)
- 1편에서 작성한
@Retry
관련 API를 호출할 때 모니터링 ({domain}/actuator/retryevents) - @Retry 가 실행 되지 않을 때 (초기상태)
- 설정해놓은 임계치를 넘은 재시도에 의해서 @Retry 실행 되었을 때 (type: ERROR 인 객체가 표시된다.)
- 설정해놓은 임계치 이전에 성공을 하였을때 (type: SUCCESS 인 객체가 표시된다. 성공하였으므로
numberOfAttempts
는 증가하지 않음)
- 1편에서 작성한 @Circuitbreaker 관련 API를 호출할 때 모니터링 ({domain}/actuator/circuitbreakerevents)
- @Circuitbreaker 가 실행되지 않을 때 (초기상태)
- 설정해놓은 임계치를 넘은 실패에 의해서 @Circuitbreaker 실행되어 Circuit이 OPEN 되었을 때
- Circuit이 HALF_OPEN 으로 되었을 때
해당 적용된 부분을 Prometheus + Grafana 모니터링을 적용하고 싶으면 다음 포스팅인 서킷브레이커(=Circuitbreaker) Resilience4j 적용 (Java + Spring Boot) 3편 을 참고하자.
반응형
'Java & Kotlin > Spring' 카테고리의 다른 글
Comments