Spring Cloud中,Eureka常見問題總結

Spring Cloud中,Eureka常見問題總結。spring

1
eureka.environment: 指定環境

參考文檔:bootstrap

1
eureka.datacenter: 指定數據中心

參考文檔: 使用配置項:緩存

1
eureka.instance.leaseRenewalIntervalInSeconds

參考文檔:
服務器

1
2
3
 

翻譯:網絡

1
做爲實例還涉及到與註冊中心的週期性心跳,默認持續時間爲30秒(經過serviceUrl)。在實例、服務器、客戶端都在本地緩存中具備相同的元數據以前,服務不可用於客戶端發現(因此可能須要3次心跳)。你能夠使用eureka.instance.leaseRenewalIntervalInSeconds 配置,這將加快客戶端鏈接到其餘服務的過程。在生產中,最好堅持使用默認值,由於在服務器內部有一些計算,他們對續約作出假設。

若是在Eureka Server的首頁看到如下這段提示,則說明Eureka已經進入了保護模式。

 

1
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.

保護模式主要用於一組客戶端和Eureka Server之間存在網絡分區場景下的保護。一旦進入保護模式,Eureka Server將會嘗試保護其服務註冊表中的信息,再也不刪除服務註冊表中的數據(也就是不會註銷任何微服務)。app

詳見: 在開發過程當中,咱們經常但願Eureka Server可以迅速有效地踢出已關停的節點,可是新手因爲Eureka自我保護模式,以及心跳週期長的緣由,經常會遇到Eureka Server不踢出已關停的節點的問題。解決方法以下:ide

(1) Eureka Server端:配置關閉自我保護,並按需配置Eureka Server清理無效節點的時間間隔。spring-boot

1
2
eureka.server.enable-self-preservation # 設爲false,關閉自我保護
eureka.server.eviction-interval-timer-in-ms # 清理間隔(單位毫秒,默認是60*1000)

(2) Eureka Client端:配置開啓健康檢查,並按需配置續約更新時間和到期時間。微服務

1
2
3
eureka.client.healthcheck.enabled # 開啓健康檢查(須要spring-boot-starter-actuator依賴)
eureka.instance.lease-renewal-interval-in-seconds # 續約更新時間間隔(默認30秒)
eureka.instance.lease-expiration-duration-in-seconds # 續約到期時間(默認90秒)

示例:
服務器端配置:
this

1
2
3
4
eureka:
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 4000

客戶端配置:

1
2
3
4
5
6
7
eureka:
client:
healthcheck:
enabled: true
instance:
lease-expiration-duration-in-seconds: 30
lease-renewal-interval-in-seconds: 10

注意:
更改Eureka更新頻率將打破服務器的自我保護功能,生產環境下不建議自定義這些配置。
詳見:
在Spring Cloud中,服務的Instance ID的默認值是${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}} ,也就是機器主機名:應用名稱:應用端口 。所以在Eureka Server首頁中看到的服務的信息相似以下:itmuch:microservice-provider-user:8000 。若是想要自定義這部分的信息怎麼辦?

示例:

eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: preferIpAddress: true instance-id: ${spring.cloud.client.ipAddress}:${server.port} # 將Instance ID設置成IP:端口的形式

eureka.client.healthcheck.enabled=true 只應該在application.yml中設置。若是設置在bootstrap.yml中將會致使一些不良的反作用,例如在Eureka中註冊的應用名稱是UNKNOWN等。

 

 

轉自:http://www.itmuch.com/spring-cloud-sum-eureka/

相關文章
相關標籤/搜索