Spring Cloud Config Client 시간 초과 및 재 시도 예시 상세 설명

간단 한 소개
때때로 클 라 이언 트 는 config server 가 응답 하지 않 을 때 다시 시도 하여 config server 시간 을 회복 해 야 합 니 다.spring 에서 제공 하 는 재 시도 구성 요 소 를 이용 하여 재 시도 간격,재 시도 횟수 등 을 편리 하 게 설정 할 수 있 습 니 다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 봅 시다.
프로젝트 원본 코드
다운로드 클릭
웹 프로젝트 에 의존 추가
클 라 이언 트 재 시도 기능 을 시작 하려 면 두 개의 새로운 의존 이 필요 합 니 다.spring-retry 와 spring-boot-starter-op 은 다음 코드 를 웹 프로젝트 의 pom.xml 파일 에 추가 합 니 다.

<dependency>
 <groupId>org.springframework.retry</groupId>
 <artifactId>spring-retry</artifactId>
 <version>1.2.2.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
그리고 boottstrap.yml 파일 에 다음 설정 을 추가 합 니 다:

spring:
 application:
 name: web-client
 cloud:
 config:
  uri: http://localhost:8888
  fail-fast: true
  retry:
  initial-interval: 1000
  max-attempts: 6
  max-interval: 2000
  multiplier: 1.1
먼저 spring.cloud.config.fail-fast 를 true 로 합 니 다.원 격 설정 을 가 져 오지 못 했 을 때 즉시 실 패 했 지만 아래 설정 으로 다시 시도 합 니 다.
spring.cloud.config.retry 의 모든 하위 항목 은 기본 값 입 니 다:
  • initial-interval:최초 재 시도 간격 은 1000 밀리초
  • max-attempts:최대 6 회 재 시도
  • max-interval:최 장 재 시도 간격 은 2000 밀리초
  • multiplier:  재 시도 에 실패 할 때마다 재 시도 간격 이 증가 하 는 배수
  • 테스트
    이 튜 토리 얼 의 항목 을 사용 했다 면 configserver 프로젝트 를 먼저 시작 한 다음 에 registry 프로젝트 를 시작 하여 eureka 를 시작 해 야 합 니 다.웹 클 라 이언 트 가 eureka 서 비 스 를 사용 한 후에 configserver 를 닫 고 웹 프로젝트 를 시작 하면 다음 과 같은 log 를 볼 수 있 습 니 다.
    2018-05-15 16:04:58.421  INFO 2663 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888
    6 번 다시 시도 하 는 데 실 패 했 습 니 다.클 라 이언 트 시작 에 실 패 했 습 니 다.configserver 를 중간 에 열 면 웹 클 라 이언 트 가 시작 되 었 습 니 다.
    입자 도 제어 재 시도
    우 리 는 코드 에서 더욱 정교 한 제어 재 시도 체 제 를 실현 할 수 있 습 니 다.웹 프로젝트 에서 새로운 자바 류 cn.zxuqian.configurations.Retry Configuration 을 만 들 고 다음 코드 를 추가 할 수 있 습 니 다.
    
    package cn.zxuqian.configurations;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.retry.interceptor.RetryInterceptorBuilder;
    import org.springframework.retry.interceptor.RetryOperationsInterceptor;
    public class RetryConfiguration {
     private static Logger log = LoggerFactory.getLogger(RetryConfiguration.class);
     @Bean
     @ConditionalOnMissingBean(name = "configServerRetryInterceptor")
     public RetryOperationsInterceptor configServerRetryInterceptor() {
      log.info(String.format(
        "configServerRetryInterceptor: Changing backOffOptions " +
          "to initial: %s, multiplier: %s, maxInterval: %s",
        1000, 1.2, 5000));
      return RetryInterceptorBuilder
        .stateless()
        .backOffOptions(1000, 1.2, 5000)
        .maxAttempts(10)
        .build();
     }
    }
    여기 서 configServerRetry Interceptor 방법 을 정의 합 니 다.Spring Retry 는 사용자 정의 재 시도 차단 기 를 사용 합 니 다.방법 은 Retry InterceptorBuilder 를 사용 하여 요구 에 따라 stateless 의 Retry Operations Interceptor 를 만 들 었 고 초기 재 시도 간격 은 1000 밀리초 이 며 증가 배 수 는 1.2 배 이 며 최대 재 시도 간격 은 5000 밀리초 이 며 최대 재 시도 횟수 는 10 회 이 며 builder 는 재 시도 체 제 를 설정 하 는 등 인 터 페 이 스 를 제공 하여 관심 있 는 독자 들 이 스스로 연구 할 수 있 습 니 다.
    @conditional OnMissingBean 은 Bean Factory 에 configServerRetry Interceptor 라 는 bean 이 없 을 때 만 이 Bean 과 일치 합 니 다.
    마지막 으로 src/main/resources/META-INF/(이 폴 더 를 만 들 수 없 음)에 spring.factories 파일 을 새로 만 듭 니 다.원 격 설정 을 가 져 오기 전에 클래스 를 시작 할 때 설정 을 지정 합 니 다.
    
    org.springframework.cloud.bootstrap.BootstrapConfiguration=cn.zxuqian.configurations.RetryConfiguration
    테스트
    마지막 으로 configserver 를 닫 는 조건 에서 웹 프로젝트 를 시작 하면 다시 10 번 시도 한 후에 프로젝트 시작 이 실 패 했 습 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기