原文出自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 微服務實戰