1、Eureka的自我保护java
默认状况下,若是Eureka server长时间接收不到来自某微服务发来的心跳,Eureka server会自动将该微服务进行注销。可是当网络分区发生故障是,服务和Eureka server之间没法正常通讯,但此时的微服务是正常工做的,此时本不该该将此实例注销。
spring
Eureka会经过自我保护机制解决这个问题。网络
当Eureka server短期内丢失大量微服务客户端时,会断定为可能发生了网络分区的故障,那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka server会保护服务注册表中的数据,不会进行注销任何微服务的操做。当网络故障恢复后,该Eureka server会自动退出自我保护模式。ide
原则:宁肯同时不注销全部微服务,包括正常和不正常的,也不会注销任何一个正常的微服务。spring-boot
关闭自我保护模式:微服务
eureka: server: enable-self-preservation: false
2、Eureka的健康检查server
已知当微服务持续向Eureka server发送心跳时,Eureka server才会认定这个微服务是可用状态,但这个状态并不能保证微服务真的可用。可能Eureka server与微服务之间的链接是正常的,可是微服务自己是有问题的,隶属数据源链接等会提致使微服务崩溃但并不影响微服务发送心跳。此时就须要将微服务的健康状态发送给Eureka server。it
在微服务项目总做以下改动:io
一、加入依赖:class
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
二、修改yml,开启健康检查:
eureka: client: healthcheck: enabled: true
这样,微服务就能够将健康信息传播到Eureka server了