勤勞的搬運工--SpringCloud--Eureka參數配置

原文出自https://www.cnblogs.com/xiemubg/p/7381055.html 點擊打開鏈接

配置詳解

在Eureka的服務治理體系中,主要分爲服務端與客戶端。服務端爲服務註冊中心,而客戶端爲各個提供接口的微服務應用。當部署高可用註冊中心時,每個服務端也已經成爲了客戶端,因此,在使用Spring Cloud Eureka的過程中,我們所做的配置內容幾乎都是對Eureka客戶端配置進行的操作,所以瞭解這部分的配置內容,對於用好Eureka非常有幫助。 
而Eureka服務端更多類似於一個現成產品,大多數情況下,我們不需要修改它的配置信息。

Eureka客戶端配置分類

  1. 服務註冊相關配置,包括服務註冊中心的地址、服務獲取的時間間隔、可用區域等。
  2. 服務實例相關配置,包括服務實例的名稱、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
eurekaConnectionIdleTimeoutSecondsEureka服務端連接的空閒關閉時間,單位爲秒30
heartbeatExecutorThreadPoolSize心跳連接池的初始化線程數2
heartbeatExecutorExponentialBackOffBound心跳超時重試延遲時間的最大乘數值10
cacheRefreshExecutorThreadPoolSize緩存刷新線程池的初始化線程數2
cacheRefreshExecutorExponentialBackOffBound緩存刷新重試延遲時間的最大乘數值10
useDnsForFetchingServiceUrls使用DNS來獲取Eureka服務端的serviceUrlfalse
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端點,以實現更加全面的健康狀態維護。 
詳細步驟如下:

  1. 在pom.xml中引入spring-boot-starter-actuator模塊的依賴 
    xml 
    <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
  2. application.properties中增加參數配置eureka.client.healthcheck.enabled=true
其他配置

均以eureka.instance爲前綴:

參數名說明默認值
preferIpAddress是否優先使用IP地址作爲主機名的標識false
leaseRenewalIntervalInSecondsEureka客戶端向服務端發送心跳的時間間隔,單位爲秒30
leaseExpirationDurationInSecondsEureka服務端在收到最後一次心跳之後等待的時間上限,單位爲秒。超過該時間之後服務端會將該服務實例從服務清單中剔除,從而禁止服務調用請求被髮送到該實例上90
nonSecurePort非安全的通信端口號80
securePort安全的通信端口號443
nonSecurePortEnabled是否啓用非安全的通信端口號true
securePortEnabled是否啓用安全的通信端口號 
appname服務名,默認取spring.application.name的配置值,如果沒有則爲unknown 
hostname主機名,不配置的時候講根據操作系統的主機名來獲取 

參考文獻 
spring cloud 微服務實戰


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章