您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Spring Cloud Eureka的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Eureka 是Spring Cloud Netflix 微服務(wù)套件中的一部分,它基于Netflix Eureka做了二次開發(fā),主要負(fù)責(zé)完成微服務(wù)架構(gòu)中的服務(wù)治理功能。
Eureka 基礎(chǔ)架構(gòu)三個核心要素
1:服務(wù)注冊中心
2:服務(wù)提供者
3:服務(wù)消費(fèi)者
服務(wù)治理主要分為:
1:服務(wù)注冊:
在服務(wù)治理框架中,通常都會構(gòu)建一個服務(wù)注冊中心,每個服務(wù)提供者需要向注冊中心,登記自己的注冊信息。比如IP,端口號,版本號,服務(wù)名,通信協(xié)議等等附加信息告知注冊中心,注冊中心會根據(jù)服務(wù)名,進(jìn)行分類服務(wù)清單。例如下圖:
eureka維護(hù)分類服務(wù)清單,是通過一個雙層Map, 第一層Map的key就是服務(wù)名,例如上圖的HELLO-SERVICE,第二層的Key就是具體的實例信息,例如上圖的DLBOOH........:hello-service:8081
2:服務(wù)發(fā)現(xiàn)
由于在服務(wù)治理框架下運(yùn)作程序,服務(wù)間的調(diào)用不在是通過指定具體的實例地址來實現(xiàn),服務(wù)間的調(diào)用通過服務(wù)名來調(diào)用,例如:http://hello-service:8081/hello。所以當(dāng)服務(wù)調(diào)用方 想要調(diào)用服務(wù)提供方的接口時,服務(wù)調(diào)用方是不知道服務(wù)提供方的具體實例地址的, 因此調(diào)用方需要向注冊中心Eureka咨詢服務(wù),并獲取所有服務(wù)的實例清單。例如:現(xiàn)有服務(wù)B想要調(diào)用服務(wù)A,服務(wù)B就需要向注冊中心發(fā)起請求獲取服務(wù)A的實例清單,注冊中心返回服務(wù)A的實例清單,然后服務(wù)B會從清單中以某種策略輪詢訪問清單中的的實例,實現(xiàn)負(fù)載均衡的效果 訪問方式可以通過 Ribbon。
實際生產(chǎn)項目中,不會在每一次請求中都獲取服務(wù)列表清單,這樣做效率低下。實際場景中緩存和服務(wù)剔除等機(jī)制也會有一些不同的實現(xiàn)方式
3:服務(wù)同步
當(dāng)Eureka實現(xiàn)高可用后,服務(wù)提供者可分別注冊到集群中的不同服務(wù)注冊中心上,也就是說 它們的信息分別被不同的注冊中心維護(hù),此時由于服務(wù)中心互相注冊為服務(wù)(高可用),當(dāng)服務(wù)提供者發(fā)送注冊請求到一個服務(wù)注冊中心時,它會將該請求轉(zhuǎn)發(fā)同步給集群中的其他注冊中心,從而實現(xiàn)服務(wù)注冊中心的服務(wù)同步。通過服務(wù)同步,兩個服務(wù)提供者的服務(wù)信息就可以通過這兩臺服務(wù)注冊中心中的任意一臺獲取到
4:服務(wù)續(xù)約
在注冊完服務(wù)之后,服務(wù)提供者會維護(hù)一個心跳用來持續(xù)告訴Eureka“我還活著”,以防止Eureka的剔除服務(wù)將該服務(wù)從列表清單中排除出去,我們稱該操作為服務(wù)續(xù)約
關(guān)于服務(wù)續(xù)約有兩個重要的屬性,
##用于定義服務(wù)續(xù)約任務(wù)的調(diào)用間隔時間,默認(rèn)為30秒
eureka.instance.lease-renewal-interval-in-seconds=30
##參數(shù)用于定義服務(wù)失效的時間,默認(rèn)為90秒
eureka.instance.lease-expiration-duration-in-seconds=90
5:獲取服務(wù)
當(dāng)服務(wù)消費(fèi)者程序啟動時,它會發(fā)送一個Rest請求給注冊中心,來獲取上面注冊的服務(wù)清單,為了性能考慮,Eureka會維護(hù)一份只讀的服務(wù)清單來返回給客戶端,同時該緩存清單會每隔30秒更新一次。
獲取服務(wù)是服務(wù)消費(fèi)者的基礎(chǔ),所以必須確保eureka.client.fetch-registry=true 默認(rèn)為true,若希望修改緩存清單的更新時間,可以通過eureka.client.registry-fetch-interval-seconds=30 進(jìn)行修改,默認(rèn)30秒,參數(shù)單位秒
6:服務(wù)調(diào)用
獲取服務(wù)清單后,通過服務(wù)名可以獲取實例的名和實例的元數(shù)據(jù)(ip,port等等)利用Ribbon實現(xiàn)輪詢方式調(diào)用服務(wù)提供方。
7: 服務(wù)下線
當(dāng)服務(wù)下線后,正常情況下 我們是不希望,服務(wù)消費(fèi)方繼續(xù)調(diào)用已經(jīng)下線的服務(wù)的,所以再服務(wù)提供方正常關(guān)閉時,會觸發(fā)一個服務(wù)下線的REST請求,告訴Eureka “我要下線了”。Eureka收到請求后,會將此服務(wù)設(shè)置為(DOWN),并將此消息廣播到出去,更新緩存清單。
8:服務(wù)中心的失效剔除
當(dāng)服務(wù)非正常關(guān)閉時,比如機(jī)器Down了,斷電,內(nèi)存溢出,網(wǎng)絡(luò)故障等等。這時候是不會觸發(fā)服務(wù)下線的REST的請求,為了將這些已經(jīng)無法提供的服務(wù)剔除,Eureka Server會在啟動時,創(chuàng)建一個定時任務(wù),默認(rèn)每隔60秒將清單中超時沒有續(xù)約的剔除。
關(guān)于“Spring Cloud Eureka的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。