问题分析
eureka的自我保护机制指的是,当网络发生问题导致服务访问失败时,eureka注册中心不会马上把应用剔除,继续保留一段时间。但这样对我们实际开发来说,需要频繁重启应用的时候,不方便测试,需要将自我保护机制关闭。
操作步骤
1. 修改eureka服务端
在原有的配置上,添加如下配置
eureka:
server:
# 关闭自我保护机制,保证不可用服务被及时剔除
enable-self-preservation: false
# 心跳检测时间,设置成2秒
eviction-interval-timer-in-ms: 2000
2. 修改eureka客户端
在原有的配置上,添加如下配置
eureka:
instance:
# eureka客户端向服务端发送心跳的时间间隔,单位是秒(默认30秒)
lease-renewal-interval-in-seconds: 1
# eureka服务端在收到最后一次心跳后等待时间的上限,单位为秒(默认90秒),超时将会剔除服务
lease-expiration-duration-in-seconds: 2
配置完成之后,经测试可体验到在服务关闭后非常快速地剔除应用。
猜想验证
- 有点小伙伴的eureka是使用了公司统一维护的,服务端没办法修改,那单独修改客户端会有效果吗?
经过测试,不会马上被剔除,但效果不是说没有。很多时候我们直接在idea上stop应用时,这个被注册的应用会持续非常非常非常久的时间,我体验上大概接近6分钟才剔除。客户端加了这个配置后,大概是在38秒之后(多次测试都是38秒)会剔除应用。如果实在没办法修改到服务端的话,修改客户端也相对会好一点。