我是靠谱客的博主 小巧小熊猫,最近开发中收集的这篇文章主要介绍Eureka心跳机制1.心跳是从什么时候开始的2.Eureka Server端接收到心跳做了什么操作3.Eureka Server在什么情况下会摘除Eureka Client的信息4.摘除的时候是怎么摘除的5.如果网络故障,会不会一次性全部摘除服务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.心跳是从什么时候开始的

在每一个Eureka Client启动的时候,都会有一个HeartbeatThread的心跳线程,这个就是一个后跳线程,保证默认30秒的时候向Eureka Server发送一个信息的请求,告诉Eureka Server当前的Eureka Client还存活着。eureka.instance.lease-renewal-interval-in-seconds,这个参数可以来配置对应的心跳间隔时间。

2.Eureka Server端接收到心跳做了什么操作

Eureka Server在接收到请求之后,肯定是先去自己的注册表中去,找到请求的对应的服务信息,在这个服务信息里面有个Lease的对象,这个里面就是可以进行心跳续约操作的,更新Lease对象里面的LastUpdateTimestamp时间戳,每一次接收到都会更新这个时间戳的。

3.Eureka Server在什么情况下会摘除Eureka Client的信息

有了心跳,也有了接受,那么怎么来判断在什么情况下,Eureka Server在什么情况下才会摘除对应没有心跳的Eureka Client的呢?

Eureka Server在启动的时候启动的时候会每60秒遍历一次注册表中的信息,然后查看注册表中的信息是否有过期的,如果过期会加入到一个列表里面单独处理。

eureka.server.evictionIntervalTimerInMs可以配置心跳检测的时间间隔,单位是毫秒。那么接下来就是多长时间没有心跳才会剔除这个服务呢?默认情况下,如果90秒还没有更新对应的LastUpdateTimestamp就表示这个服务可能故障了,我们需要给他做摘除的操作了。如果有看过源码的话,肯定有人会奇怪一点。

public void renew() {   lastUpdateTimestamp = System.currentTimeMillis() + duration; }

续约的时候是上面的代码,更新的时间戳。

public boolean isExpired(long additionalLeaseMs) {
   return (evictionTimestamp > 0 || System.currentTimeMillis() > (lastUpdateTimestamp + duration + additionalLeaseMs));
}

这个是来判断是否过期的,这个里面还有一个duration,大家是不是很奇怪这个duration到底是什么?这个就是90秒过期的配置,这个参数可以通过eureka.instance.lease-expiration-duration-in-seconds来配置。

看完这些你还觉得是90秒才会过期么?这样看来最少应该是180秒才会摘除对应的服务,那么有的人还会问,additionalLeaseMs是什么?additionalLeaseMs只是用来容错的,正常情况下为0。

这个地方就是Eureka给自己留的bug,在以后有人问起来,你知道这个地方,别人就知道你肯定是看过源码,知道这个地方的,所以这个地方大家还是需要记录一下的。

4.摘除的时候是怎么摘除的

我在上面说了,每次摘除的时候会添加到一次Queue里面,那么在这个Queue里面是怎么操作的呢?

其实很简单,在这个Queue里面为每个服务调用对应的下线的接口就好了,下线的接口里面在更新对应的注册表的信息和对应缓存的信息,然后同步给其他Eureka Server。

5.如果网络故障,会不会一次性全部摘除服务

Eureka Server有一个自我保护机制,如果开启,每次最多只能摘除15%的服务实例,正常情况向下在线上的情况是不能开启的,eureka.server.enable-self-preservation设为false的情况下是关闭自我保护机制的。

最后

以上就是小巧小熊猫为你收集整理的Eureka心跳机制1.心跳是从什么时候开始的2.Eureka Server端接收到心跳做了什么操作3.Eureka Server在什么情况下会摘除Eureka Client的信息4.摘除的时候是怎么摘除的5.如果网络故障,会不会一次性全部摘除服务的全部内容,希望文章能够帮你解决Eureka心跳机制1.心跳是从什么时候开始的2.Eureka Server端接收到心跳做了什么操作3.Eureka Server在什么情况下会摘除Eureka Client的信息4.摘除的时候是怎么摘除的5.如果网络故障,会不会一次性全部摘除服务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部