1.心跳机制
Eureka是通过心跳的方式实现对各个服务实例的健康检测的。在Eureka的服务续约与剔除机制下,客户端的健康状态从注册到注册中心开始都会处于UP状态,除非心跳中止一段时间后,服务注册中心将其剔除。心跳机制以有效检查客户端进程是否正常运作。
自定义心跳时间:
服务启动后,Eureka Client实例将会向Eureka Server发送周期性的心跳,
默认是每30秒发送一次,可通过修改Eureka Client实例的eureka.instance.
leaseRenwalIntervalInSeconds属性来改变发送周期性心跳的默认时间。
eureka:
instance:
leaseRenewalIntervalInSeconds: 5 #设置心跳时间为5秒
自定义Eureka Server刷新服务列表,将无效服务剔除的时间间隔:
Eureka Server如果在一定期限内没有接收到Eureka Client实例的心跳,那么会将该实例从注册中心剔除掉,其他客户端将无法访问这个实例。这个期限默认值为90秒。可以通过eureka.instance.leaseExpriationDurationInSeconds属性修改默认值,示例代码如下:
eureka:
instance:
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10 #设置每隔10秒刷新服务列表,将无效服务剔除
2.自我保护机制
Eureka的自我保护机制是为了防止误杀服务。如果Eureka Server注册中心发生故障,那么Eureka Client服务就有可能不能正常续约,虽然这时Eureka Client服务是正常的,但注册中心依然会将超过90秒未续约的服务剔除,造成误杀服务的情况。
Eureka Server如何判断是否开启自我保护?
Eureka Server通过判断是否存在大量续约失败的服务,从而确定是否开启自我保护。默认情况下,Eureka Server配置的自我保护阀值是0.85,如果Eureka Server运行期间根据心跳比例接收到的服务续约低于阀值,则Eureka Server开启自我保护,不再剔除注册列表的信息。
如何关闭自我保护机制?
如果在Eureka Server保护期间,可能会发生服务下线的情况,此时Eureka Server维护的服务清单就不那么准确了,此时可以关闭保护保护机制,确保服务中心不可用的服务实例被及时剔除。
默认情况下,Eureka Server自我保护是开启的,如果需要关闭,则可以在配置文件中添加如下代码:
eureka:
server:
enable-self-preservation: false