服务重启zuul不能及时发现

服务重启, 启动完成,zuul不能及时发现。 通过网关访问会报Load balancer does not have available server for client, 最多30秒(默认值)后访问正常。
修改zuul端配置:
eureka.instance.leaseRenewalIntervalInSeconds=2
eureka.instance.leaseExpirationDurationInSeconds=2
eureka.instance.registryFetchIntervalSeconds=2
eureka.client.registry-fetch-interval-seconds=2

不知道哪个正确, 全配上去了, 还是一样,不生效。 debug过, 确实是2秒拿一次注册信息。

注册中心用的都是默认值, 开启自我保护。

求解。
已邀请:

少时黑羽 - Java

赞同来自:

1.服务下线的时候 最好调用shutdown优雅下线,这样eureka注册表中才会及时更新
 
2.配置 剔除服务失效扫描时间 eureka.server.eviction-interval-timer-in-ms

lvan100

赞同来自:

我觉得应该是  com.netflix.client.config.CommonClientConfigKey#NFLoadBalancerPingInterval  这个属性在控制。com.netflix.loadbalancer.BaseLoadBalancer#initWithConfig  这个函数会调用com.netflix.loadbalancer.BaseLoadBalancer#setPingInterval,之后继续调用com.netflix.loadbalancer.BaseLoadBalancer#setupPingTask,
setupPingTask函数设置了一个Ping任务,这个任务会更新当前可用的服务器列表,而ribbon.NFLoadBalancerPingInterval 或者 <ONE_SERVICE>.ribbon.NFLoadBalancerPingInterval 就是用来控制这个Ping任务的执行间隔的。我试了将该值设成10和100的情况,从访问服务出现500错误开始到真正可用,中间的时间间隔和那个值有很大关系,为10时很快就能获取到页面,为100时好长时间之后才能获取到页面。

少时黑羽 - Java

赞同来自:

他这个是开启了自我保护,所以服务一直没被剔除,需要关闭eureka的自我保护机制
另外shutdown也会做不到正在的优雅下线的,因为eureka客户端会缓存注册表,所以shutdown所谓的优雅下线其实跟kill -9差不多,正在的优雅下线可以尝试扩展负载均衡算法,提前给下线实例打标记

Levin - 90后IT男

赞同来自:

服务调用shutdown会剔除eureka的注册实例,附上优雅shutdown文章:http://blog.battcn.com/2017/08 ... 3more

要回复问题请先登录注册