服務(wù)治理:Spring Cloud Eureka(一)

服務(wù)治理可以說(shuō)是微服務(wù)架構(gòu)中最為核心和基礎(chǔ)的模塊,它主要是用來(lái)實(shí)現(xiàn)各個(gè)微服務(wù)實(shí)例的自動(dòng)化注冊(cè)與發(fā)現(xiàn)。

如下,創(chuàng)建一個(gè)簡(jiǎn)單的eureka server步驟。

首先,創(chuàng)建一個(gè)基礎(chǔ)的springboot工程,在pom文件中引入:

通過(guò)@EnableEurekaServer注解啟動(dòng)一個(gè)服務(wù)注冊(cè)中心提供給其他應(yīng)用進(jìn)行對(duì)話。

在默認(rèn)配置下,,該服務(wù)注冊(cè)中心也會(huì)將自己作為客戶端來(lái)嘗試注冊(cè)自己,所以我們需要禁用它的客戶端注冊(cè)行為,只需要在application.properties文件中添加如下配置:

eureka.client.fetch-registry=false:由于注冊(cè)中心的職責(zé)就是維護(hù)服務(wù)實(shí)例,它并不需要去檢索服務(wù),所以設(shè)置為false? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?eureka.client.register-with-eureka=false:代表不向注冊(cè)中心注冊(cè)自己

完成以上配置后,啟動(dòng)應(yīng)用并訪問(wèn)http://localhost:8080,可以看到eureka注冊(cè)信息面板。


再創(chuàng)建一個(gè)eureka client。

在springboot應(yīng)用基礎(chǔ)上引入以下pom依賴:

在主類中添加@EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient實(shí)現(xiàn),此處也可以用@EnableEurekaClient,區(qū)別是@EnableEurekaClient只能使用Eureka作為注冊(cè)中心。

配置文件中配置對(duì)應(yīng)的注冊(cè)中心地址:

最簡(jiǎn)單的一個(gè)服務(wù)端跟客戶端就完成了。


高可用注冊(cè)中心

Eureka Server的高可用實(shí)際上就是將自己作為服務(wù)向其他服務(wù)中心注冊(cè)自己,這樣就形成了一組互相注冊(cè)的服務(wù)注冊(cè)中心,以實(shí)現(xiàn)服務(wù)清單的互相同步。

在設(shè)置了多節(jié)點(diǎn)的服務(wù)注冊(cè)中心后,服務(wù)提供客戶端需注冊(cè)到eureka server集群中。服務(wù)提供者啟動(dòng)了兩個(gè)實(shí)例,分別注冊(cè)到兩個(gè)注冊(cè)中心上,(兩個(gè)消費(fèi)者客戶端也分別指向一個(gè)注冊(cè)中心)。

這里的兩個(gè)服務(wù)提供者分別注冊(cè)到了兩個(gè)不同的服務(wù)注冊(cè)中心上,也就是說(shuō),它們的信息分別被兩個(gè)服務(wù)注冊(cè)中心維護(hù)。此時(shí),由于服務(wù)注冊(cè)中心之間因互相注冊(cè)為服務(wù),當(dāng)服務(wù)提供者發(fā)送注冊(cè)請(qǐng)求到一個(gè)服務(wù)注冊(cè)中間時(shí),它會(huì)將該請(qǐng)求轉(zhuǎn)發(fā)給集群中相連的其他注冊(cè)中心,從而實(shí)現(xiàn)注冊(cè)中心之間的服務(wù)同步。通過(guò)服務(wù)同步,兩個(gè)服務(wù)提供者的服務(wù)信息就可以通過(guò)這兩臺(tái)服務(wù)注冊(cè)中心中的任意一臺(tái)獲取到。


服務(wù)續(xù)約

在注冊(cè)完服務(wù)之后,服務(wù)提供者會(huì)維護(hù)一個(gè)心跳用來(lái)持續(xù)告訴eureka server,防止被剔除出服務(wù)列表,這就是服務(wù)續(xù)約。默認(rèn)的調(diào)用續(xù)約任務(wù)時(shí)間為30秒,定義服務(wù)時(shí)效的時(shí)間為90秒。

eureka.instance.lease-renewal-interval-in-seconds=30

eureka.instance.lease-expiration-duration-in-seconds=90


服務(wù)調(diào)用

啟動(dòng)服務(wù)消費(fèi)者后,會(huì)發(fā)送rest請(qǐng)求給服務(wù)注冊(cè)中心,來(lái)獲取上面注冊(cè)的服務(wù)清單。為了性能考慮,eureka server會(huì)維護(hù)一份只讀的服務(wù)清單來(lái)返回給客戶端,同時(shí)該緩存清單默認(rèn)是隔30秒更新一次。獲取服務(wù)清單后,通過(guò)服務(wù)名可以獲得具體提供服務(wù)的實(shí)例名和該實(shí)例的元數(shù)據(jù)信息。因?yàn)橛羞@些服務(wù)實(shí)例的詳細(xì)信息,所以客戶端可以根據(jù)自己的需要決定具體調(diào)用哪個(gè)實(shí)例,在Ribbon中會(huì)默認(rèn)采用輪詢的方式進(jìn)行調(diào)用,從而實(shí)現(xiàn)客戶端的負(fù)載均衡。

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

相關(guān)閱讀更多精彩內(nèi)容

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