EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE
阿新 • • 發佈:2019-02-18
一、Eureka的自我保護模式
如果在Eureka Server的首頁看到以下這段提示,則說明Eureka已經進入了保護模式:
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.
- 1
- 2
- 3
- 4
一般出現此模式時,服務返回錯誤。即如果真實的服務已經Down掉,但在註冊中心介面服務卻一直存在,且顯示為UP狀態。
產生原因:
Eureka Server在執行期間,會統計心跳失敗的比例在15分鐘之內是否
低於85%,如果出現低於的情況(在單機除錯的時候很容易滿足,實際在
生產環境上通常是由於網
絡不穩定導致),Eureka Server會將當前的例項註冊資訊保護起來,同時提
示這個警告。保護模式主要用於一組客戶端和Eureka Server之間存在網路分
區場景下的保護。一旦進入保護模式,Eureka Server將會嘗試保護其服務注
冊表中的資訊,不再刪除服務登錄檔中的資料(也就是不會登出任何微服務)。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
解決方法:
詳情可見上一篇部落格,就不在這邊贅述了。
- 1
- 2
如何處理服務掛掉後或者手動關閉服務後,Ribbon負載均衡還是一直呼叫這個服務:
1.Hystrix,在fallback方法中shutdown指定的服務 2.讓zuul只路由到活著的那個服務: 新增依賴: <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.6.0</version> </dependency> 配置檔案: ribbon.connectTimeout: 2000 ribbon.readTimeout: 10000 ribbon.maxAutoRetries: 1 ribbon.maxAutoRetriesNextServer: 2 ribbon.okToRetryOnAllOperations: true ribbon.okhttp.enabled: true 3.重試機制(和上述一個道理) spring.cloud.loadbalancer.retry.enabled=true hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000 hello-service.ribbon.ConnectTimeout=250 hello-service.ribbon.ReadTimeout=1000 hello-service.ribbon.OkToRetryOnAllOperations=true hello-service.ribbon.MaxAutoRetriesNextServer=2 hello-service.ribbon.MaxAutoRetries=1 spring.cloud.loadbalancer.retry.enabled:該引數用來開啟重試機制,它預設是關閉的。這裡需要注意,官方文件中的配置引數少了enabled hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:斷路器的超時時間需要大於ribbon的超時時間,不然不會觸發重試。 hello-service.ribbon.ConnectTimeout:請求連線的超時時間 hello-service.ribbon.ReadTimeout:請求處理的超時時間 hello-service.ribbon.OkToRetryOnAllOperations:對所有操作請求都進行重試 hello-service.ribbon.MaxAutoRetriesNextServer:切換例項的重試次數 hello-service.ribbon.MaxAutoRetries:對當前例項的重試次數
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
二、指定Eureka的Environment
eureka.environment: 指定環境
- 1
- 2
三、指定Eureka的DataCenter
eureka.datacenter: 指定資料中心
- 1
- 2
四、Whitelabel Error Page
@springBootApplication在進行載入時,只會載入其入口的當前目錄及其子目錄下的服務,如果存放在其它目錄下,應用掃描不到
- 1
- 2