eureka服务启动后不及时生效引发的血案。。。

今天,又是阳光明媚(摸鱼)的一天。闲来无事试一下spring cloud的熔断机制(hystrix)。然后发现一个问题,服务关闭再启动的时候不能及时生效。一开始以为是熔断配置的问题,后来去掉熔断,还是存在这个问题。然后开启了一步步的探索之路。。。

1.查看当前实例

    @GetMapping("/allClients")
    public List<ServiceInstance> listAllClients() {
        List<ServiceInstance> provider = discoveryClient.getInstances("PROVIDER");
        return provider;
    }

自己封装了一个接口,查看当前服务的所有实例,发现服务启动后并不能及时获取到实例,那么自然访问不到服务了,然后又发现了一个配置RegistryFetchIntervalSeconds

2.客户端获取服务实例信息定时任务

原来客户端在启动的时候会从注册中心全量获取所有实例信息,然后启动一个定时任务,定时(默认30秒)从注册中心增量获取实例信息。定时任务的执行间隔就导致了服务延迟。

eureka:
  client:
    registry-fetch-interval-seconds: 1

这个配置就是设置任务执行间隔,然后我就改成每1秒执行一次,这样就应该可以达到实时的效果了。

3.注册中心对实例信息缓存

改成1秒后,我发现还是不能实时生效。然后继续查看资料,发现注册中心也会对实例信息进行缓存,而且采用了二级缓存。这个缓存的过期时间也是30s,这样就导致了服务延迟生效。

 

参考资料:

  https://blog.youkuaiyun.com/yuu1009/article/details/80821403

  https://segmentfault.com/a/1190000016909677?utm_source=tag-newest

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值