在自我保护模式被禁用的情况下,服务器等待租约取消仍然需要很长时间。

有几个原因:

每个客户端服务每 30 秒(默认值)向服务器发送一次心跳,该间隔值可使用eureka.instance.leaseRenewallInternervalInSeconds属性进行设置。如果服务器没有收到心跳,那么它会在从注册表中删除实例之前等待 90 秒,然后才切断到该实例的流量,这个等待时间可以使用eureka.instance.leaseExpirationDurationInSeconds属性进行设置。这两个参数均在客户端进行设置。

eureka:
  instance:
    leaseRenewallInternervalInSeconds: 30
    leaseExpirationDurationInSeconds: 90

eureka 在后台运行驱逐任务,负责检查是否仍在接收来自客户端的心跳。默认情况下,它每 60 秒触发一次。因此,即使租约续订的间隔和租约到期的持续时间被设置为相对比较低的值,也仍然需要 60 秒(在最坏的情况下)才能删除服务实例。可以使用 evictionIntervalTimerInMs 属性配置后续计时器在毫秒之间的延迟(以毫秒为单位)。

eureka:
  server:
    enableSelfPreservation: false
    evictionIntervalTimerMs: 6000