eureka在关闭自我保护情况下过期服务不及时下线问题跟踪
1、微服务中使用eureka注册中心的三种角色eureka server注册中心
注册中心作为存储服务,提供各种服务提供方注册的服务信息,eureka正常启动后可使用 http://localhost:8761/ 查看已注册的服务信息及相关配置信息,http://localhost:8761/eureka/apps/feign-service 可查看某个服务的明细信息,其中feign-service 即服务的名称。eureka: server: enable-self-preservation: false eviction-interval-timer-in-ms: 10000
参数 enable-self-preservation 为是否开启eureka自我保护参数,eviction-interval-timer-in-ms 为清除过期服务时间间隔,如设置成每10秒清除一次过期服务,启动eureka注册中心服务后每间隔10秒会有Running the evict task with compensationTime 3ms 日志;服务提供方
将服务信息注册到eureka注册中心,并可配置维持心跳检测(续期)时间((默认30秒)及过期时间(默认90秒)。 eureka: client: register-with-eureka: true fetch-registry: true instance: lease-renewal-interval-in-seconds: 1 lease-expiration-duration-in-seconds: 10
register-with-eureka 表示是否将服务注册到eureka中,服务提供方应设置为true ;fetch-registry 表示是否从注册中心获取配置,服务消费方应配置为true ;lease-renewal-interval-in-seconds 表示续期时间间隔,即1秒心跳检测一次,为了演示方便调短时间;lease-expiration-duration-in-seconds 续期超时时间,即超过此时间后服务检测不到心跳即过期。服务消费方
从注册中心获取需要调用的服务提供方相关信息 2、跟踪失效服务的清除
将注册中心的清除时间间隔 eviction-interval-timer-in-ms 改为1000 ,即每秒钟触发一次清除过期服务;
将服务提供方心跳检测时间 lease-renewal-interval-in-seconds 改为1 ,每秒续一次时间,并将过期时间lease-expiration-duration-in-seconds 设置为10 ,即应该在10 秒后没有收到心跳即过期,启动服务后可在注册中心查看相关的参数是否生效http://localhost:8761/eureka/apps/feign-service ,在instance->leaseInfo 中可看到以下配置;1 10
按照以上的设置,如果服务提供方在 6:00:00 的时间挂掉的话,按eureka每秒清除一次过期服务,且服务提供方的续期过期时间10秒 ,服务应该在6:00:11 左右的时间清除掉,而实际上服务却是在6:00:21 左右的时间点才清除;经过反复的测试验证没有按这个预期内的时间清除掉这个服务;
最后在源码中找到答案
查看类 com.netflix.eureka.registry.AbstractInstanceRegistry 中的public void evict(long additionalLeaseMs) 方法,因为演示中只注册了一个服务,所以省略掉其他非关键部分如下// We collect first all expired items, to evict them in random order. For large eviction sets, // if we do not that, we might wipe out whole apps before self preservation kicks in. By randomizing it, // the impact should be evenly distributed across all applications. List> expiredLeases = new ArrayList<>(); for (Entry>> groupEntry : registry.entrySet()) { Map> leaseMap = groupEntry.getValue(); if (leaseMap != null) { for (Entry> leaseEntry : leaseMap.entrySet()) { Lease lease = leaseEntry.getValue(); if (lease.isExpired(additionalLeaseMs) && lease.getHolder() != null) { expiredLeases.add(lease); } } } }
大概意思是收集到全部过期的服务,并随机清除,其中最关键的部分 isExpired 判断如下/** * Checks if the lease of a given {@link com.netflix.appinfo.InstanceInfo} has expired or not. * * Note that due to renew() doing the "wrong" thing and setting lastUpdateTimestamp to +duration more than * what it should be, the expiry will actually be 2 * duration. This is a minor bug and should only affect * instances that ungracefully shutdown. Due to possible wide ranging impact to existing usage, this will * not be fixed. * * @param additionalLeaseMs any additional lease time to add to the lease evaluation in ms. */ public boolean isExpired(long additionalLeaseMs) { return (evictionTimestamp > 0 || System.currentTimeMillis() > (lastUpdateTimestamp + duration + additionalLeaseMs)); }
这里解析了 renew() 这个方法做了错误的事情,使用lastUpdateTimestamp 加了duration ,所以实际的过期是2 倍的duration 时间,接下来看看类com.netflix.eureka.lease.Lease 中的renew() 方法;/** * Renew the lease, use renewal duration if it was specified by the * associated {@link T} during registration, otherwise default duration is * {@link #DEFAULT_DURATION_IN_SECS}. */ public void renew() { lastUpdateTimestamp = System.currentTimeMillis() + duration; }
果然是在最后更新时间中增加了 duration ,在演示中去掉这个duration 即符合预期了
通常情况下如果我们需要平滑升级服务,需要先将原来的微服务逐个标识成OUT_OF_SERVICE,curl -X PUT http://root:password@localhost:8761/eureka/apps/feign-service/localhost:feign-service:8888/status?value=OUT_OF_SERVICE,在下一个续约周期中将会更新服务提供方的实例信息,再将此服务下线,从而避免因服务的升级造成服务不可用。
俯冲带地球化学研究取得重要进展科技日报记者吴长锋记者9日从中国科学技术大学获悉,该校郑永飞院士研究团队戴立群教授研究组,在长期研究俯冲带壳幔相互作用的基础上,选择中国华北陆块东南部出露的中生代和新生代镁铁质岩浆
对越反击战,越军违背国际公约,使用了化学武器1979年初春,中国人民解放军在对越自卫还击保卫边疆作战的过程中,发现越军冒天下之大不韪,悍然对我军进行了多次小规模的,以西埃斯刺激性毒剂为主的扰乱性化学袭击。根据实战情况分析,越
浙江省政府公布一批职务任免通知来源浙江之声记者何冰倩浙江省人民政府网版权归原作者所有,如有侵权请及时联系近日,浙江省政府官网公布了一批职务任免通知,详情浙江省人民政府关于华宣飞等职务任免的通知省政府研究决定华宣
浙江省象山中学2022学年秋季运动会圆满落幕青春正当时,拼搏向未来10月31日上午,迎着煦煦和风,灿灿秋阳,浙江省象山中学2022学年秋季运动会如期而至。师生齐聚一堂,共赴一场心灵与体魄的交流,一场力与美的盛宴。学校方阵红旗
高瓴盯上了万华化学文荆玉投资一家传统的化工企业,这在高瓴资本的二级市场投资历史上并不常见。10月24日,化工茅万华化学发布公告称,2022年前三季度,实现营业收入1304。2亿元,同比增长21。53
近十年诺贝尔化学奖得主汇总,其研究使化学领域产生了哪些巨变?10月5日下午,2022年诺贝尔化学奖揭晓,凭借对点击化学和生物正交化学方面所做出的贡献,卡罗琳露丝贝尔托西(CarolynR。Bertozzi)摩顿梅尔达尔(MortenMeld
湖南省级领导干部在省委党校省科技厅省住建厅宣讲党的二十大精神红网时刻新闻11月10日讯(记者刘志雄卢欣吴公然)按照省委统一部署,10月10日,省人大常委会副主任张剑飞,副省长陈飞李建中分别在省委党校(湖南行政学院)省科技厅省住建厅宣讲党的二
恒大的双11今年双11,最大博人眼球的不是以往年双11多少秒破亿,多少时间破十亿,多少时间破百亿的报道,而是一则恒大挂牌出售原深圳总部地块的消息占据了各大新闻的头版。报道说11月11日,深圳公
李佳琦的双十一,改变了什么?美眉们,我们来咯!10月24日下午3点,伴随着双十一预售首日的热络,李佳琦准时出现在淘宝直播间。这天,李佳琦直播间的主题是超级美妆节,他共直播了9小时53分33秒。星图数据显示,当
中国禅宗祖师有一天,达摩向他的师傅求教说我得到佛法以后,应到何地传化?般若多罗说你应该去震旦(即中国)。又说你到震旦以后,不要住在南方,那里的君主喜好功业,不能领悟佛理。达摩遵照师父的嘱咐,准
国内首条海上观航演航线在珠海首航成功11月10日,国内首条海上观航演航线首航取得圆满成功。畅游伶仃洋海上观航演航线由九洲蓝色干线精心策划打造,航线聚焦珠海国际航天航空博览会,以飞行表演为主线,精选最精彩的时段,通过大