1. 程式人生 > >EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE

一、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

有不準確,或者有疑問的地方朋友,可以加群,也可以在評論中指出,謝謝大家