开发过程中,Eukeka服务端和客户端配置我们一般使用默认配置,但经常发现有些已经停止的服务没有从注册中心删除或很久才删除,关键在于Eureka心跳检测和自我保护机制。客户端按固定周期(lease-renewal-interval-in-seconds)向服务端发送心跳请求,服务端按固定周期(eviction-interval-timer-in-ms)开启EvictionTask任务,在允许租约过期(Eureka在自我保护状态中是不允许租约过期的)的情况下,扫描注册的服务,若发现有租约过期则删除租约(即删除服务注册)。

Eukeka未删除已经停止的服务

客户端的心跳检测参数:

eureka.instance.lease-renewal-interval-in-seconds: 5                      # 心跳检测间隔时间,默认30
eureka.instance.lease-expiration-duration-in-seconds: 8                # 过期时间,必须大于心跳间隔时间,默认90

服务端的服务租约检测:

eureka.server.enable-self-preservation = false # 是否开启自我保护机制,默认true
eureka.server.eviction-interval-timer-in-ms = 10000 # 剔除无效服务间隔时间,单位毫秒,默认1分钟

服务端判断租约是否过期方式为 当前时间>最后一次心跳时间+过期时间(lease-expiration-duration-in-seconds),代码如下:

Eukeka未删除已经停止的服务

上面代码,duration就是客户端定义的过期时间,additionalLeaseMs可以当做0

 

若使用默认配置,从服务关闭到从Eureka注册中心删除该服务,最多需要(90+60)秒

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-03
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2022-12-23
  • 2022-12-23
  • 2021-06-03
  • 2022-12-23
  • 2021-10-20
  • 2021-08-23
相关资源
相似解决方案