Eureka服務例項類配置

2021-08-21 14:22:03 字數 3058 閱讀 9899

關於服務例項類的配置資訊,可以通過檢視org.springframework.cloud.netflix.eureka.eurekainstanceconfigbean的原始碼來獲取詳細內容,這些配置資訊都是以eureka.instance為字首,下面針對一些常用的配置資訊做一些詳細的說明。

一 元資料

在org.springframework.cloud.netflix.eureka.eurekainstanceconfigbean的配置資訊中,有一大部分內容都是針對服務例項元資料的配置,那麼什麼是服務例項的元資料呢?它是eureka客戶端向服務註冊中心傳送請求時,用來描述自身服務資訊的物件,其中包含了一些標準的元資料;以及一些用於負載均衡策略或是其他用途的自定義元資料資訊。

可以通過eureka.instance.=的格式對標準定義元資料直接進行配置,其中就是eurekainstanceconfigbean物件中的成員變數名。而對於自定義的元資料,可以通過eureka.instance.metadatamap.=的格式進行配置,比如:

eureka.instance.metadatamap.zone=shanghai

二 例項名配置

例項名,即instanceinfo中的instanceid引數,它是區分同一例項的唯一標識。在netflix eureka的原生實現中,例項名採用主機名作為預設值,這樣的設定使得同一主機上無法啟動多個相同的服務例項。但在spring cloud eureka的配置中,針對同一主機中啟動多個例項的情況,對例項名的預設命名做了更為合理的擴充套件,它採用了如下預設的規則:

對於例項名的命名規則,我們可以通過eureka.instance.instanceid引數來進行配置。

比如在本地進行客戶端負載均衡除錯時,需要啟動同一服務的多個例項,如果我們直接啟動同乙個應用必然會產生埠衝突。雖然可以在命令列中指定不同的server.port來啟動,但是這樣還是比較麻煩。實際上,我們可以直接通過設定server.port=0或者使用隨機數server.port=$來讓tomcat啟動時候採用隨機埠。但是這個時候我們發現註冊到eureka serve的例項名都是相同的,這會使得只有乙個服務例項能夠正常提供服務。對於這個問題,我們就可以通過設定例項名規則來輕鬆解決:

通過上面的配置,利用應用名加隨機數的方式來區分不同的例項,從而實現在同一主機上,不指定埠就能啟動多個例項的效果。

三 端點配置

在instanceinfo中,可以看到一些url的配置資訊,比如homepageurl、statuspageurl、healthcheckurl。它們分別代表了應用主頁的url、狀態頁的url、健康檢查的url。其中,狀態頁和監控檢查的url在spring cloud eureka中預設使用了spring-boot-actuator模組提供的/info端點和/health端點。為了服務的正常運作,必須確認eureka客戶端的/health端點在傳送元資料的時候,是乙個能夠被註冊中心訪問的位址,否則服務註冊中心不會根據應用的健康狀態來更改狀態(僅當開啟了healthcheck功能時,以該端點資訊作為健康檢查標準)。而/info端點如果不正確的話,會導致在eureka面板單擊服務例項時,無法訪問到服務例項提供的資訊介面。

在一些特殊的情況下,比如,為應用設定了context-path,這時,所有spring-boot-actuator模組的監控端點都會增加乙個字首。所以,我們就需要做類似如下的配置,為/info和/health端點也加上類似的字首:

management.context-path=/hello

eureka.instance.statuspageurlpath=$/info

eureka.instance.healthcheckurlpath=$/health

另外,有時候為了安全考慮,也有可能會修改/info和/health端點的原始路徑。這個時候,我們也需要做一些特殊配置,例如:

endpoints.health.path=/cheakhealth

eureka.instance.statuspageurlpath=/$

eureka.instance.healthcheckurlpath=/$

上面例項使用的是相對路徑。

由於eureka的服務註冊中心缺省會以http的方式來訪問和暴露這些端點,因此當客戶端應用以https的方式來暴露服務和監控端點時,相對路徑的配置方式就無法滿足要求了。所以,spring cloud eureka還提供了絕對路徑的配置引數,例如:

四 健康檢查預設情況下,eureka中各個服務例項的健康檢查並不是通過spring-boot-actuator模組的/health端點來實現的,而是依靠客戶端心跳的方式保持服務例項的存活,在eureka的服務續約與剔除機制下,客戶端的監控狀態從註冊到註冊中心開始都會處於up狀態,除非心跳終止一段時間之後,服務註冊中心將其剔除。預設的心跳實現方式可以有效檢查客戶端程序是否正常運作,但卻無法保證客戶端應用能夠正常提供服務。由於大多數的應用都會有一些其他的外部資源依賴,比如資料庫。快取、訊息**等,如果應用與這些外部資源無法聯通的時候,實際上已經不能提供正常的對外服務了,但此時心跳依然正常,所以它還是會被服務消費者呼叫,而這樣的呼叫實際上並不能獲得預期的結果。

在spring cloud eureka中,我們可以通過簡單的配置,把eureka客戶端的監控檢查交給spring-boot-actuator模組的/health端點,以實現更加全面的健康狀態維護。

詳細步驟如下:

1 在pom.xml中加入spring-boot-starter-actuator模組的依賴。

五 其他配置

這些配置均以eureka.instance為字首

Remoting服務例項

由於最近開始接觸remoting專案,所以特意學習了一下,寫了一篇簡要的例項分享,加深一遍對remoting服務框架的理解,個人覺得它的原理就是分布式的呼叫遠端主機上的類庫,在不同機器上的應用程式域之間建立通道,使用可序列化的遠端物件傳遞資料。github鏈結 1.遠端物件 public class...

nodejs實現web服務例項

使用nodejs,採用express是乙個很好的選擇,也可自己採用http庫直接實現。該列子通過簡單的事件,把資料粘起來,從而能應對post模式中大資料傳輸的要求。關於上面列子,可滿足較高併發。若提高併發訪問要注意3點 1 優化系統,centos下主要是sysctl.conf 2 提高cpu,因為n...

Python的HTTP服務例項

1 前言 今天需要實現乙個pyhton的http服務,與web的js進行交換。2 例項 支援head get post方法,將引數轉換為json格式,返回結果以json字串返回。使用nodejs預設測試如下 var request require request set the headers va...