Eureka的功能特性及相關配置

2022-05-02 11:30:06 字數 1859 閱讀 9270

1.服務提供者

1.1服務註冊

服務提供者啟動時,會通過rest請求的方式將自己註冊到eureka server上,同時帶上了自身服務的一些元資料資訊。eureka server接收到請求後,將元資料資訊儲存在乙個雙層結構的map中,其中與第一層的key是服務名,第二層的key是具體的服務例項名

eureka.client.register-with-eureka=false 是否向註冊中心註冊自己 預設 true

eureka.client.fetch-registry=false 是否去檢索註冊中心的服務 預設 true

1.2服務續約

在註冊完服務後,服務提供者會維護乙個心跳用來持續高速eureka server「我還活著」,以防止eureka server的「剔除任務」將該服務例項從服務列表中排除出去

eureka.instance.lease-renewal-interval-in-seconds=30 定義服務續約任務的呼叫間隔時間 預設30s

eureka.instance.lease-expiration-duration-in-seconds=90 定義服務失效的時間 預設90s

1.3服務下線

當服務例項進行正常的關閉操作時,會觸發乙個服務下線的rest請求給eureka server ,告訴註冊中心:」我要下線了「,服務端在接收請求後,將該服務置為下線(down),並把下線時間傳播出去(通知服務消費者)

2.服務消費者

2.1獲取服務

eureka.client.fetch-registry=ture 是否檢索註冊中心的服務,獲取服務則必須設定為true 預設為true

eureka.client.registry.fetch.interval.seconds=30 當啟動服務消費者時,會傳送乙個rest請求給註冊中心,來獲取上面註冊的服務清單;為了效能考慮,eureka server會維護乙份唯讀的服務清單來返回給客戶端,同時快取清單會每隔30秒更新一次

2.2服務呼叫

服務消費者獲取服務清單後,通過服務名可以獲取具體提供服務的例項名和該例項的元資料資訊。有了這些元資料資訊,客戶端可以根據自己的需要決定具體呼叫哪個例項。對於訪問例項的選擇,eureka中有region和zone兩個概念,乙個region中可以包含多個zone,每個服務客戶端需要被註冊到乙個zone鐘,所以每個客戶端對應乙個region和乙個zone。在進行服務呼叫時,優先訪問同處乙個zone的服務提供方,若訪問不到,再訪問其他zone的服務提供者。

3.服務註冊中心

3.1服務同步

當兩個服務提供者註冊到註冊中心集群,它們的資訊被註冊中心集群維護(此時註冊中心之間互相註冊為服務)當服務提供者傳送服務註冊請求到乙個註冊中心時,他會將該請求**給集群中相連的其他註冊中心,從而實現註冊中心的服務同步。通過服務同步,兩個服務提供者的服務資訊就可以通過這兩台服務註冊中心的任意一台獲取到。

3.2失效剔除

有時,服務例項並不一定是正常下線,可能由於記憶體溢位,網路故障等原因使得服務不能正常工作,而服務註冊中心並未收到「服務下線」的請求。為了從服務列表中將這些無法提供服務的例項剔除,eureka server在啟動時會建立乙個定時任務,預設每隔一段時間(預設60s)將當前清單中超時(預設90s)沒有續約的服務剔除

3.3自我保護

這就是由於觸發了eureka server的自我保護機制

可以使用eureka.server.enable-self-preservation=false引數來關閉保護機制

類產生的原因及相關特性

類的產生其實就是為了使用者方便定義自己的資料型別,類性質和c 中的標準庫型別如string型別是一樣的。可使用關鍵字class或struct來定義類,二者唯一的差別就是類內部成員的預設訪問級別,預設情況下struct的成員為public,而class成員為private。資料抽象和封裝是類的基本思想...

CentOS 系統安裝 nodejs 及相關配置

今天我在我的 aws ec2 伺服器上安裝了 nodejs。沒想到竟然這麼麻煩,比在 windows 和 mac 上麻煩多了。所以我把心得記錄下來,供以後開發時參考,相信對其他人也有用。linux 安裝nodejs環境以及路徑配置 對於不同的伺服器,需要選擇不同的包管理器。比如 macos 就建議用...

cartographer 相關功能包安裝及使用

安裝所有依賴項 sudo apt get install y google mock libboost all dev libeigen3 dev libgflags dev libgoogle glog dev liblua5.2 dev libprotobuf dev libsuitespars...