Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 618
Anson Wang Avatar asked Sep 19 '16 06:09

Anson Wang


1 Answers

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

like image 191
codependent Avatar answered Sep 24 '22 11:09

codependent