1. 程式人生 > >勤勞的搬運工--SpringCloud--Eureka引數配置

勤勞的搬運工--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
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端點,以實現更加全面的健康狀態維護。 
詳細步驟如下:

  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
leaseRenewalIntervalInSeconds Eureka客戶端向服務端傳送心跳的時間間隔,單位為秒 30
leaseExpirationDurationInSeconds Eureka服務端在收到最後一次心跳之後等待的時間上限,單位為秒。超過該時間之後服務端會將該服務例項從服務清單中剔除,從而禁止服務呼叫請求被髮送到該例項上 90
nonSecurePort 非安全的通訊埠號 80
securePort 安全的通訊埠號 443
nonSecurePortEnabled 是否啟用非安全的通訊埠號 true
securePortEnabled 是否啟用安全的通訊埠號  
appname 服務名,預設取spring.application.name的配置值,如果沒有則為unknown  
hostname 主機名,不配置的時候講根據作業系統的主機名來獲取  

參考文獻 
spring cloud 微服務實戰