Eureka自我保护机制
为什么产生自我保护
为了防止eurekaclient可以正常运行,但是eurekaserver网络不通情况下,eurekaservice不会立刻将eurekaclient服务剔除
生么是自我保护
默认情况下,如果eurekaserver在一定时间内没有接受到某个微服务实例的心跳,eurekaserver将会注销该实例(默认90s)。但是当网络分区故障发生(延迟、卡顿、拥挤)时,微服务于eurekaserver之间无法正常通信,以上行为可能变得非常危险了----因为微服务本身其实时健康的,此时不应该注销这个微服务。eureka通过“自我保护模式”来解决这个问题----当eurekaserver节点在短时间内丢失过多的客户端时(可能发生了网络分区故障),那么这个节点就会进去自我保护机制模式。
如果Eureka在server端在一定时间内(默认90秒)没有收到EurekaClient发送心跳包,便会直接从服务注册列表中剔除该服务,但是在短时间(90秒中)内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通但是EurekaClient为出现宕机,此时如果换做别的注册中心如果一定时间内没有收到心跳会将剔除该服务,这样就出现了严重失误,因为客户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的)
禁止自我保护
注册端
服务提供端
在注册端加入这行代码
eureka.server.enable-self-preservation: false
关闭后eureka显示
关闭自我保护后,只要收不到心跳包后就直接剔除了该微服务提供者。