Eureka自我保护机制

Eureka的自我保护机制

Eureka服务端会检查最近15分钟内所有Eureka 实例正常心跳占比,如果低于85%就会触发自我保护机制。触发了保护机制,Eureka将暂时把这些失效的服务保护起来,不让其过期,但这些服务也并不是永远不会过期。Eureka在启动完成后,每隔60秒会检查一次服务健康状态,如果这些被保护起来失效的服务过一段时间后(默认90秒)还是没有恢复,就会把这些服务剔除。如果在此期间服务恢复了并且实例心跳占比高于85%时,就会自动关闭自我保护机制。

为什么会有自我保护机制?

​ Eureka服务端为了防止Eureka客户端本身是可以正常访问的,但是由于网路通信故障等原因,造成Eureka服务端失去于客户端的连接,从而形成的不可用。

因为网络通信是可能恢复的,但是Eureka客户端只会在启动时才去服务端注册。如果因为网络的原因而剔除了客户端,将造成客户端无法再注册到服务端。

如何选择关闭还是开启自我保护机制

Eureka服务端默认情况下是会开启自我保护机制的。但我们在不同环境应该选择是否开启保护机制。

一般情况下,我们会选择在 开发环境下关闭自我保护机制,而在生产环境下启动自我保护机制。

开发环境下,我们我们启动的服务数量较少而且会经常修改重启。如果开启自我保护机制,很容易触发Eureka客户端心跳占比低于85%的情况。使得Eureka不会剔除我们的服务,从而在我们访问的时候,会访问到可能已经失效的服务,导致请求失败,影响我们的开发。

在生产环境下,我们启动的服务多且不会反复启动修改。环境也相对稳定,影响服务正常运行的人为情况较少。适合开启自我保护机制,让Eureka进行管理。

如何关闭自我保护机制

一、 服务端:

​ 配置eureka.server.enable-self-preservation = false关闭自我保护机制。

​ 配置eureka.server.eviction-interval-timer-in-ms = 2000让服务端每隔2秒扫描一次,是服务能尽快的剔除。

eureka:
  server:
    #服务端是否开启自我保护机制 (默认true)
    enable-self-preservation: false
    #扫描失效服务的间隔时间(单位毫秒,默认是60*1000)即60秒
    eviction-interval-timer-in-ms: 2000

客户端:

​ 客户端配置eureka.instance.lease-renewal-interval-in-seconds = 1 客户端向服务端发送心跳的间隔,设置为1秒一次。

​ lease-expiration-duration-in-seconds: 2 服务端收到客户端服务后,等待下次心跳的超时时间,设置为2秒。如果超过2秒,移除该客户端。

我们的客户端设置和Eureka服务端的集群相同。我们设置三个客户端服务,服务名(spring.name)分别为client1、client2和client3,并修改端口号(server.port)分别为10000、20000、30000。

server:
  port: 10000
spring:
  application:
    name: client1
eureka:
  
  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值