복붙노트

[SPRING] Spring Cloud Ribbon에서 ribbon.serverListRefreshInterval 기본값을 재정의하는 방법은 무엇입니까?

SPRING

Spring Cloud Ribbon에서 ribbon.serverListRefreshInterval 기본값을 재정의하는 방법은 무엇입니까?

Eureka에 등록 된 REST 서비스를 호출하기 위해 간단한 Spring Cloud Ribbon 애플리케이션을 작성했습니다.

그러나 ribbon.serverListRefreshInterval 값을 재정의하는 방법은 무엇입니까? 기본값은 30 초입니다. 시간 간격을 줄이고 싶습니다.

미리 감사드립니다.

해결법

  1. ==============================

    1.사용해보기 :

    사용해보기 :

    myService.ribbon.ServerListRefreshInterval=10000
    

    여기서 myService는 대상 마이크로 서비스의 이름입니다.

    최신 정보:

    일부 소스 코드를 파고 나면 LoadBalancerBuilder가 호출한다는 것을 알게되었습니다.

    @Deprecated
    public ZoneAwareLoadBalancer(IClientConfig clientConfig, IRule rule,
            IPing ping, ServerList<T> serverList, ServerListFilter<T> filter) {
        super(clientConfig, rule, ping, serverList, filter);
    }
    

    누구의 슈퍼입니까?

    @Deprecated
    public DynamicServerListLoadBalancer(IClientConfig clientConfig, IRule rule, IPing ping, 
            ServerList<T> serverList, ServerListFilter<T> filter) {
        this(
                clientConfig,
                rule,
                ping,
                serverList,
                filter,
                new PollingServerListUpdater()
        );
    } 
    

    PollingServerListUpdater 생성자를 확인하십시오.

    private static int LISTOFSERVERS_CACHE_REPEAT_INTERVAL = 30 * 1000; // msecs;
    
    public PollingServerListUpdater() {
        this(LISTOFSERVERS_CACHE_UPDATE_DELAY, LISTOFSERVERS_CACHE_REPEAT_INTERVAL);
    }
    
    public PollingServerListUpdater(IClientConfig clientConfig) {
        this(LISTOFSERVERS_CACHE_UPDATE_DELAY, getRefreshIntervalMs(clientConfig));
    }
    

    두 번째는 기본 새로 고침 간격을 무시할 수 있습니다. 그러나 이것은 처음 호출 된 것이므로 de property를 무시합니다.

    업데이트 2 :

    이에 대한 공개 문제가 있습니다. https://github.com/spring-cloud/spring-cloud-netflix/issues/1304

  2. ==============================

    2.@codependent

    @codependent

    application.yml에 아래의 설정을 입력하면 설정이 적용되지 않은 것으로 보입니다.

    Compute-Service:   
      ribbon:  
        ServerListRefreshInterval: 1000
    

    인스턴스 목록이 리본 측면에서 (eureka.client.registry-fetch-interval-seconds 매개 변수를 통해) 업데이트되었지만 여전히 리본이 죽은 인스턴스를 가리키는 것을 관찰했습니다.

    [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_RIBBON-CONSUMER/192.168.1.101:Ribbon-Consumer:3333 - Heartbeat status: 200  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : Got delta update with apps hashcode UP_2_  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : Added instance 192.168.1.101:Ribbon-Consumer:3333 to the existing apps in region null  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : Deleted instance 192.168.1.101:Compute-Service:2222 to the existing apps  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : Added instance 192.168.1.101:Compute-Service:1111 to the existing apps in region null  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : The total number of instances fetched by the delta processor : 3  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : The total number of all instances in the client now is 2  
    [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : Completed cache refresh task for discovery. All Apps hash code is Local region apps hashcode: UP_2_, is fetching remote regions? false  
    [nio-3333-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://Compute-Service/add": Connection refused; nested exception is java.net.ConnectException: Connection refused] with root cause 
    

    192.168.1.101:Compute-Service:1111은 올바른 서비스 인스턴스 였고 192.168.1.101:Compute-Service:2222는 죽은 인스턴스 였지만 분명히 리본이 아직 작동하지 않는 인스턴스를 가리켰습니다. 즉, 리본 서버 목록 캐시가 새로 고쳐지지 않았습니다.

  3. from https://stackoverflow.com/questions/39567078/how-to-override-the-ribbon-serverlistrefreshinterval-default-value-in-spring-clo by cc-by-sa and MIT license