在本地启动一个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.
了解Euraka自我保护机制
服务注册到Euraka Server之后,会维护一个心跳连接,告诉EurakaServer自己还活着。Euraka Server在运行期间,会统计心跳失败的比例在15分钟内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,在生产环境上通常是由于网络不稳定导致),EurakaServer会将当前的实例注册信息保存起来,让这些实例不会过期尽可能的保护这些注册信息。但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。
Euraka自我保护机制开关
通过配置
eureka.server.enable-self-preservation=false;参数来关闭保护机制,以确保注册中心可以将不可用的实例正确剔除,默认为true。
自我保护模式被激活的条件
转载/qq_2300688967/article/details/80855106
是在 1 分钟后,Renews (last min) < Renews threshold
。
这两个参数的意思:
Renews threshold
:Eureka Server 期望每分钟收到客户端实例续约的总数。Renews (last min)
:Eureka Server 最后 1 分钟收到客户端实例续约的总数。
具体的值,我们可以在Eureka Server界面可以看到:
调整服务续约配置
instance的心跳间隔秒数:eureka.instance.lease-renewal-interval-in-seconds=30服务失效时间:eureka.instance.lease-expiration-duration-in-seconds=90自我保护系数:eureka.server.renewal-percent-threshold=0.85
如果觉得《Spring Cloud Eureka 自我保护机制(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY)》对你有帮助,请点赞、收藏,并留下你的观点哦!