Spring Cloud Eureka 實例類配置

本文為個人筆記,若要轉(zhuǎn)載,請注明作者。
1.元數(shù)據(jù)

org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean 配置信息中有一大部分都是對服務(wù)實例元數(shù)據(jù)的配置。
元數(shù)據(jù)是什么?
元數(shù)據(jù)是:Eureka客戶端在向服務(wù)注冊中心發(fā)送注冊時,用來描述自己服務(wù)信息的對象,包含了一些標(biāo)準(zhǔn)化的元數(shù)據(jù),比如服務(wù)名稱、是咧名稱、實例IP、實例端口等用于服務(wù)治理的重要信息;甚至有一些用于負(fù)載均衡策略或時其他用途自定義的元數(shù)據(jù)信息。

在使用 Spring Cloud Eureka 的時候,所有的配置信息都是通過 org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean 進行加載,但在真正服務(wù)注冊的時候會把數(shù)據(jù)存儲在 com.netflix.appinfo.InstanceInfo 對象發(fā)送給 Eureka 服務(wù)端。
這兩個類非常相似,我們可以通過查看 com.netflix.appinfo.InstanceInfo 類中的詳細(xì)定義來了解原生的 Eureka 對元數(shù)據(jù)的定義。其中,Map<String, String> metadata = new ConcurrentHashMap<String, String>()時自定義的元數(shù)據(jù)信息,其他變量則時標(biāo)準(zhǔn)化的元數(shù)據(jù)信息,也就是已經(jīng)界定好的數(shù)據(jù)信息。Spring Cloud 的 EurekaInstanceConfigBean 對原聲元數(shù)據(jù)對象做了一些配置優(yōu)化化處理。
我們可以通過eureka.instance.<properties>=<value>的格式對標(biāo)準(zhǔn)化元數(shù)據(jù)進行配置,其中<properties>就是 EurekaInstanceConfigBean 對象中的成員變量。
若我們需要自定義元數(shù)據(jù),可以通過 eureka.instance.metadataMap.<key>=<value>的格式來進行配置,例如:
eureka.instance.metadataMap.zone=yidongde130
下面我們針對一些常用的元數(shù)據(jù)配置做進一步的介紹和說明。
1.1 實例名配置
實例名:就是 InstanceInfo 中的 instanceId 參數(shù), 它是區(qū)分同一服務(wù)中不同實例的唯一標(biāo)識。在 Netflix Eureka 的原生實現(xiàn)中,實例名采用主機名作為默認(rèn)值,這樣使得在同一主機中無法啟動多實例的情況。所以, Spring Cloud Eureka 對實例名的默認(rèn)命名做出了合理的擴展。默認(rèn)規(guī)則如下:
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
對于實例名的命名股則,我們可以通過 eureka.instance.instanceId 參數(shù)來進行配置。比如,在本地進行客戶端負(fù)載均衡調(diào)試時,需要啟動同一服務(wù)的多個實例,如果我們直接啟動一個應(yīng)用沒必然會產(chǎn)生端口沖突,雖然在命令行中制定不同的 server.port 來啟動,但是這種方式還是比較麻煩。那我們可以通過server.port=0 或者使用隨機數(shù) server.port=${random.int[10000,19999]} 來讓Tomcat 啟動的時候采用隨即端口。我們這個時候會發(fā)現(xiàn)注冊到 Eureka Server 的實例名都相同的,這會使得只有一個服務(wù)實力能夠正常提供服務(wù)。對于這個問題,我們可以同故宮設(shè)置實例名規(guī)則來輕松解決:
eureka.instance.instanceId=${spring.application.name}:${randmo.int}
通過以上的配置,利用應(yīng)用名加隨機數(shù)的方式來區(qū)分不同的實例,從而實現(xiàn)在同一主機上,不指定端口就能輕松啟動多個實例的效果。

1.2 端點配置
在 InstanceInfo 中,我們可以看到一些URL的配置信息,比如 homePageUrl、statusPageUrl、healthCheckUrl, 它們分別代表了應(yīng)用主頁的URL、狀態(tài)頁的URL、健康檢查的URL。其中,狀態(tài)頁和健康檢查頁的URL在Spring Cloud Eureka 中默認(rèn)使用了 spring-boot-actuator 模塊提供的/info端點和/health端點。雖然我們在之前的示例中并沒有對這些端點做具體的設(shè)置,但是實際上這些URL地址的配置非常重要。為了服務(wù)的正常運作,我們必須確保Eureka客戶端的/health端點在發(fā)送元數(shù)據(jù)的時候,是一個能夠被注冊中心訪問到的地址,否則服務(wù)注冊中心不會根據(jù)應(yīng)用的健康檢查來更改狀態(tài)(僅當(dāng)開啟了healthcheck功能時, 以該端點信息作為健康檢查標(biāo)準(zhǔn))。而/info端點如果不正確的話會導(dǎo)致在Eureka面板中單擊服務(wù)實例時,無法訪問到服務(wù)實例提供的信息接口。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容