SpringBoot 를 사용 하여 마이크로 서비스 시간 초과 재 시도 모드 를 구현 하 는 예제
5045 단어 springboot마이크로 서비스다시 시도 모드
마이크로 서 비 스 는 본질 적 으로 분포 식 이다.분포 식 시스템 을 사용 할 때 이 첫 번 째 법칙 을 항상 기억 하 세 요- 인터넷 에서 무슨 일이 든 일어 날 수 있다.이런 의외 의 고장 을 처리 하 는 것 은 해결 하기 어 려 울 것 이다.고장 은 모든 것 일 수 있 습 니 다.-응용 프로그램,하드웨어 또는 네트워크 등.
시스템 이 고장 에서 회복 되 고 정상 적 인 운행 을 유지 하 는 능력 은 시스템 을 더욱 갖 추 게 한다. 신축성그것 은 하류 서비스의 어떠한 등급 연결 고장 도 피 했다.
다시 시도 모드:
마이크로 서비스 시스템 구조 에서 여러 서비스(A,B,C,D)가 있 을 때 하나의 서비스(A)는 다른 서비스(B)에 의존 할 수 있 고 다른 서비스(B)는 C 에 의존 할 수 있다 는 것 을 유추 해 볼 수 있다.어떤 문제 로 인해 서비스 D 가 예상 한 대로 응답 하지 못 할 수도 있 습 니 다.서비스 D 가 메모리 부족 과 같은 일부 이상 을 일 으 킬 수 있 습 니 다. 오류 나 내부 서버 오류.이러한 이상 은 하위 서비스 로 연결 되 어 불량 사용자 체험 을 초래 할 수 있 습 니 다.다음 과 같 습 니 다.
때때로 구 글 닷 컴 이 우리 에 게 도움 이 되 지 않 을 때 우 리 는 포기 하지 않 을 뿐이다.우 리 는 페이지 가 다음 에 정상적으로 작 동 할 수 있 고 대부분 상황 에서 페이지 를 새로 고 칠 것 이 라 고 가정 하기 때문에 페이지 를 새로 고치 기만 하면 된다.간헐 적 네트워크 문 제 는 매우 보편적이다.마이크로 서비스 분야 에서 저 희 는 같은 서비스 D 의 여러 인 스 턴 스 를 실행 하여 높 은 가용성 과 부하 균형 을 실현 할 수 있 습 니 다.만약 에 하나의 인 스 턴 스 에 문제 가 있 고 우리 의 요청 에 정확하게 응 하지 못 할 경우 이 요청 을 다시 시도 하면 부하 이퀄 라이저 는 운행 상태 가 좋 은 노드 에 요청 을 보 내 고 정확 한 응답 을 받 을 수 있 습 니 다.따라서'재 시도'옵션 을 사용 하면 정확 한 응답 을 받 을 수 있 는 기회 가 더 많 습 니 다.
이 간단 한 응용 프로그램 을 고려 하여 이 재 시도 모드 를 설명 합 시다.
위 에서 말 한 바 와 같이 우 리 는 여러 개의 마이크로 서비스 가 있다.
제품 서 비 스 는 제품 목록 을 충당 하고 제품 정보 제공 을 책임 집 니 다제품 서 비 스 는 등급 평가 서비스 에 달 려 있다4.567917.평 점 서비스 유지 제품 평가 와 평 점. 대량의 데 이 터 를 가지 고 있 기 때문에 속도 가 느 린 것 은 잘 알려 져 있다4.567917.우리 가 제품 의 상세 한 정 보 를 볼 때마다 제품 서 비 스 는 평 점 서비스 에 요청 하여 이 제품 의 평 가 를 받는다4.567917.저 희 는 다른 서비스 도 있 습 니 다.예 를 들 어 계 정 서비스,주문 서비스 와 지불 서비스 등 은 본 고의 토론 과 무관 합 니 다4.567917.제품 서 비 스 는 핵심 서비스 로 그것 이 없 으 면 사용 자 는 주문 작업 절 차 를 시작 할 수 없습니다.
설정:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.6.1</version>
</dependency>
제품 서 비 스 는 사용자 의 검색 조건 에 따라 제품 목록 을 제공 하 는 것 을 책임 진다.그것 은 관건 적 인 부하 에서 도 시작 하고 응답 해 야 할 핵심 서비스 중 하나 이다.떨 어 지면 소득 에 심각 한 영향 을 미친다.이 서 비 스 는 등급 평가 서비스 에 달 려 있 기 때문에 우 리 는 어떠한 네트워크 문제 나 등급 평가 서비스 가 이 제품 서비스 에 영향 을 주지 않 기 를 원 하지 않 습 니 다.이것 이 바로 resilience4j 를 사용 하 는 것 입 니 다. 창고 의 목적.
resilience4j.retry:
instances:
ratingService:
maxRetryAttempts: 3
waitDuration: 5s
retryExceptions:
- org.springframework.web.client.HttpServerErrorException
ignoreExceptions:
- org.springframework.web.client.HttpClientErrorException
someOtherService:
maxRetryAttempts: 3
waitDuration: 10s
retryExceptions:
- org.springframework.web.client.HttpServerErrorException
- java.io.IOException
코드:
@Service
public class RatingServiceClient {
private final RestTemplate restTemplate = new RestTemplate();
@Value("${rating.service.endpoint}")
private String ratingService;
@Retry(name = "ratingService", fallbackMethod = "getDefault")
public CompletionStage<ProductRatingDto> getProductRatingDto(int productId){
Supplier<ProductRatingDto> supplier = () ->
this.restTemplate.getForEntity(this.ratingService + productId, ProductRatingDto.class)
.getBody();
return CompletableFuture.supplyAsync(supplier);
}
private CompletionStage<ProductRatingDto> getDefault(int productId, HttpClientErrorException throwable){
return CompletableFuture.supplyAsync(() -> ProductRatingDto.of(0, Collections.emptyList()));
}
}
코드 설명:다시 시도 모드 신축성 마이크로 서 비 스 를 디자인 하 는 가장 간단 한 마이크로 서비스 입 니 다. 디자인 모델 중 하나.재 시 도 를 도입 하면 네트워크 와 관련 된 문 제 를 해결 할 수 있다.
코. 여기 서 얻 을 수 있 습 니 다.
여기 서 획득 할 수 있 습 니 다.
이상 은 SpringBoot 를 사용 하여 마이크로 서비스 시간 초과 재 시도 모델 을 실현 하 는 예제 의 상세 한 내용 입 니 다.SpringBoot 가 마이크로 서비스 시간 초과 실현 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.