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了