勤勞的搬運工--SpringCloud--Eureka引數配置
原文出自https://www.cnblogs.com/xiemubg/p/7381055.html 點選開啟連結
配置詳解
在Eureka的服務治理體系中,主要分為服務端與客戶端。服務端為服務註冊中心,而客戶端為各個提供介面的微服務應用。當部署高可用註冊中心時,每個服務端也已經成為了客戶端,因此,在使用Spring Cloud Eureka的過程中,我們所做的配置內容幾乎都是對Eureka客戶端配置進行的操作,所以瞭解這部分的配置內容,對於用好Eureka非常有幫助。
而Eureka服務端更多類似於一個現成產品,大多數情況下,我們不需要修改它的配置資訊。
Eureka客戶端配置分類
- 服務註冊相關配置,包括服務註冊中心的地址、服務獲取的時間間隔、可用區域等。
- 服務例項相關配置,包括服務例項的名稱、IP地址、埠號、健康檢查路徑等。
服務註冊類配置
關於服務註冊類的配置資訊,我們可以通過檢視org.springframework.cloud.netflix.eureka.EurekaClientConfig
的原始碼來獲得比官方文件中更為詳盡的內容。這些配置資訊都已eureka.client
為字首。
指定註冊中心
指定註冊中心主要通過eureka.client.serviceUrl
引數實現。
如果我們構建了高可用註冊中心叢集時,我們可以為引數的value值配置多個註冊中心的地址。例如:
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka,http://peer2:1112/eureka/
為了服務註冊中心的安全考慮,很多時候我們都會為服務註冊中心加入安全校驗。這個時候,在配置serviceUrl時,需要在value值得URL中加入相應的安全校驗資訊,比如: http://<username>:<password>@localhost:1111/eureka
其他常用配置
這些常用配置均已eureka.client
為字首
引數名 | 說明 | 預設值 |
---|---|---|
enabled | 啟用Eureka客戶端 | true |
registryFetchIntervalSeconds | 從Eureka服務端獲取註冊資訊的間隔時間,單位為秒 | 30 |
instanceInfoReplicationIntervalSeconds | 更新例項資訊的變化到Eureka服務端的間隔時間,單位為秒 | 30 |
initialInstanceInfoReplicationIntervalSeconds | 初始化例項資訊到Eureka服務端的間隔時間,單位為秒 | 40 |
eurekaServiceUrlPollIntervalSeconds | 輪詢Eureka服務端地址更改的間隔時間,單位為秒。當我們與Spring CLoud Config整合,動態重新整理Eureka的serviceURL地址時需要關注該引數 | 300 |
eurekaServerReadTimeoutSeconds | 讀取Eureka Server資訊的超時時間,單位為秒 | 8 |
eurekaServerConnectTimeoutSeconds | 連結Eureka Server的超時時間,單位為秒 | 5 |
eurekaServerTotalConnections | 從Eureka客戶端到所有Eureka服務端的連線總數 | 200 |
eurekaServerTotalConnectionsPerHost | 從Eureka客戶端到每個Eureka服務端主機的連線總數 | 50 |
eurekaConnectionIdleTimeoutSeconds | Eureka服務端連線的空閒關閉時間,單位為秒 | 30 |
heartbeatExecutorThreadPoolSize | 心跳連線池的初始化執行緒數 | 2 |
heartbeatExecutorExponentialBackOffBound | 心跳超時重試延遲時間的最大乘數值 | 10 |
cacheRefreshExecutorThreadPoolSize | 快取重新整理執行緒池的初始化執行緒數 | 2 |
cacheRefreshExecutorExponentialBackOffBound | 快取重新整理重試延遲時間的最大乘數值 | 10 |
useDnsForFetchingServiceUrls | 使用DNS來獲取Eureka服務端的serviceUrl | false |
registerWithEureka | 是否要將自身的例項資訊註冊到Eureka服務端 | true |
preferSameZoneEureka | 是否偏好使用處於相同Zone的Eureka服務端 | true |
filterOnlyUpInstances | 獲取例項時是否過濾,僅保留UP狀態的例項 | true |
fetchRegistry | 是否從Eureka服務端獲取註冊資訊 | true |
服務例項類配置
關於服務例項類配置資訊,我們可以通過檢視org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean
的原始碼來獲取詳細內容,這些配置資訊都以eureka.instance
為字首。
元資料
元資料是Eureka客戶端在想服務註冊中心傳送註冊請求時,用來描述自身服務資訊的物件,其中包含了一些標準化的元資料,比如服務名稱、例項名稱、例項IP、例項埠等用於服務治理的重要資訊;以及一些用於負載均衡策略或是其他特殊用途的自定義元資料資訊。
我們可以通過eureka.instance.<properties>=<value>
的格式對標準化元資料直接進行配置,其中properties
就是EurekaInstanceConfigBean
物件中的成員變數名。而對於自定義元資料,可以通過eureka.instance.metadataMap.<key>=<value>
的格式來進行配置,比如:
eureka.instance.metadataMap.zone=shanghai
例項名配置
即InstanceInfo
中的instanceId
引數,它是區分同一服務中不同例項的唯一標識。在Netflix Eureka的原生實現中,例項名採用主機名作為預設值,這樣會使得在同一
主機上無法啟動多個相同的服務例項。所以,在Spring Cloud Eureka的配置中,針對統一主機中啟動多例項的情況,對例項名的預設命名作了更為合理的擴充套件,它採用瞭如下預設規則:
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
對於例項名的命名規則,我們也可以通過eureka.instance.instanceId
引數來進行配。如:
eureka.instance.instanceId=${spring.application.name}:${random.int}
通過上面的配置,利用應用名加隨機數的方式來區分不同的例項,從而實現在統一主機上,不指定埠就能輕鬆啟動多個例項的效果。
端點配置
- homePageUrl:應用主頁的URL
- statusPageUrl:狀態頁的URL
- healthCheckUrl:健康檢查的URL
其中,狀態頁和健康檢查的URL在Spring Cloud Eureka中預設使用了spring-boot-actuator模組提供的/info
端點和/health
端點。並且這些端點起著很重要的作用
為了服務的正常運作,我們必須確保Eureka客戶端的/health
端點在傳送元資料的時候,是一個能被註冊中心訪問到的地址,否則服務註冊中心不會根據應用的健康檢查來更改狀態(僅當開啟了healthcheck功能時,以該端點資訊作為健康檢查標準)。而/info
端點如果不正確的話,會導致在Eureka面板中單機服務例項時,無法訪問到服務例項提供的資訊介面。
大多數情況下,我們並不需要修改這幾個URL配置。
健康檢測
預設情況下,Spring CLoud Eureka中各個服務例項的健康檢測並不是通過spring-boot-actuator模組的/health
端點來實現的,而是依靠客戶端心跳的方式來保持服務例項的存活。因此,預設的心跳方式作為健康檢測並不保險。因為不能檢測服務是否能有效提供服務。
在Spring Cloud Eureka中,我們可以通過簡單的配置,把Eureka客戶端的健康檢測交給spring-boot-actuator模組的/health
端點,以實現更加全面的健康狀態維護。
詳細步驟如下:
- 在pom.xml中引入spring-boot-starter-actuator模組的依賴
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> - 在
application.properties
中增加引數配置eureka.client.healthcheck.enabled=true
其他配置
均以eureka.instance
為字首:
引數名 | 說明 | 預設值 |
---|---|---|
preferIpAddress | 是否優先使用IP地址作為主機名的標識 | false |
leaseRenewalIntervalInSeconds | Eureka客戶端向服務端傳送心跳的時間間隔,單位為秒 | 30 |
leaseExpirationDurationInSeconds | Eureka服務端在收到最後一次心跳之後等待的時間上限,單位為秒。超過該時間之後服務端會將該服務例項從服務清單中剔除,從而禁止服務呼叫請求被髮送到該例項上 | 90 |
nonSecurePort | 非安全的通訊埠號 | 80 |
securePort | 安全的通訊埠號 | 443 |
nonSecurePortEnabled | 是否啟用非安全的通訊埠號 | true |
securePortEnabled | 是否啟用安全的通訊埠號 | |
appname | 服務名,預設取spring.application.name的配置值,如果沒有則為unknown | |
hostname | 主機名,不配置的時候講根據作業系統的主機名來獲取 |
參考文獻
spring cloud 微服務實戰