Spring Cloud Eureka 自我保护机制(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY)

在本地启动一个Euraka-Server服务(服务注册中心)和一个Euraka-Client服务(服务注册者-应用服务)两个服务。过了一会儿后,在Euraka-Server界面显示:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

Spring Cloud Eureka 自我保护机制(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY)_第1张图片

 了解Euraka自我保护机制

服务注册到Euraka Server之后,会维护一个心跳连接,告诉Euraka Server自己还活着。Euraka Server在运行期间,会统计心跳失败的比例在15分钟内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,在生产环境上通常是由于网络不稳定导致),Euraka Server会将当前的实例注册信息保存起来,让这些实例不会过期尽可能的保护这些注册信息。但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

Euraka自我保护机制开关

通过配置

eureka.server.enable-self-preservation=false;参数来关闭保护机制,以确保注册中心可以将不可用的实例正确剔除,默认为true。

 

自我保护模式被激活的条件

转载  https://blog.csdn.net/qq_2300688967/article/details/80855106

是在 1 分钟后,Renews (last min) < Renews threshold

这两个参数的意思:

  • Renews thresholdEureka Server 期望每分钟收到客户端实例续约的总数
  • Renews (last min):Eureka Server 最后 1 分钟收到客户端实例续约的总数

具体的值,我们可以在 Eureka Server 界面可以看到:

Spring Cloud Eureka 自我保护机制(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY)_第2张图片

 调整服务续约配置

  1. instance的心跳间隔秒数:eureka.instance.lease-renewal-interval-in-seconds=30
  2. 服务失效时间:eureka.instance.lease-expiration-duration-in-seconds=90
  3. 自我保护系数:eureka.server.renewal-percent-threshold=0.85

你可能感兴趣的:(遇到的问题)