Search code examples
springcloudspring-cloudspring-cloud-netflixnetflix-ribbon

How to override the ribbon.serverListRefreshInterval default value in Spring Cloud Ribbon?


I wrote a simple Spring Cloud Ribbon application, to call a REST service which was registered in Eureka.

But how to override the ribbon.serverListRefreshInterval value? The default value is 30 seconds, I'd like to reduce the time interval.

Thanks in advance.


Solution

  • Try with:

    myService.ribbon.ServerListRefreshInterval=10000
    

    where myService is the name of your destination microservice.

    UPDATE:

    After some source code digging I found out that LoadBalancerBuilder calls:

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

    whose super is:

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

    Notice the PollingServerListUpdater constructors:

    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));
    }
    

    The second one would allow us to override the default refresh interval. However it's the first one that's called, so it ignores the property.

    UPDATE 2:

    There's an open issue about this: https://github.com/spring-cloud/spring-cloud-netflix/issues/1304