Eureka服務(wù)注冊(cè)
Eureka作為一個(gè)微服務(wù)的治理中心,它是一個(gè)服務(wù)應(yīng)用,可以接收其他服務(wù)的注冊(cè),也可以發(fā)現(xiàn)和治理服務(wù)實(shí)例。
服務(wù)治理中心是微服務(wù)(分布式)架構(gòu)中最基礎(chǔ)和最核心的功能組件,它主要對(duì)各個(gè)服務(wù)實(shí)例進(jìn)行管理,包括服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)等
本文參考:springcloud教程 -- 1.快速搭建入門級(jí)demo,看這一篇就夠了-CSDN博客
兩個(gè)組件
Eureka包含兩個(gè)組件:Eureka Server和Eureka Client。?
Eureka Server提供服務(wù)注冊(cè),各個(gè)節(jié)點(diǎn)啟動(dòng)后,會(huì)在Eureka Server中進(jìn)行注冊(cè),這樣Eureka Server中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到。
Eureka Client用于簡(jiǎn)化與Eureka Server的交互,在應(yīng)用啟動(dòng)后,將會(huì)向Eureka Server發(fā)送心跳,如果Eureka Server在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳,Eureka Server將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除。
eureka模塊
這里的一個(gè)模塊就是一個(gè)微服務(wù)。
主要依賴,這個(gè)依賴用于指明當(dāng)前服務(wù)為eureka server。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>4.0.0</version>
</dependency>
新建一個(gè)服務(wù),需要在主工程上右鍵選擇new->module
j-cloud-server-eureka的啟動(dòng)類需加上注解@EnableEurekaServer, 來(lái)聲明其是一個(gè)基于Eureka的服務(wù)注冊(cè)發(fā)現(xiàn)中心
注解@EnableEurekaServer,它代表著在Spring Boot應(yīng)用啟用之時(shí),也啟動(dòng)Eureka服務(wù)器。此時(shí),我們以Java Application的形式運(yùn)行,就能夠啟用Eureka服務(wù)治理中心
eureka的配置文件,定義了defaultZone: http://jorian:123456@localhost:8761/eureka 這個(gè)配置用來(lái)聲明要將服務(wù)注冊(cè)到哪個(gè)eureka上,但是本服務(wù)是eureka server服務(wù),所以用reguster-with-eureka為false來(lái)指明不需要注冊(cè)本服務(wù)。(是否注冊(cè)都可以)
配置介紹
●spring.application.name:配置的是Spring應(yīng)用的名稱,也是微服務(wù)的名稱,在Spring Cloud中,一個(gè)微服務(wù)可以擁有多個(gè)實(shí)例。
●eureka.client.register-with-eureka:這個(gè)配置項(xiàng)是取消當(dāng)前微服務(wù),尋找其他Eureka服務(wù)治理中心進(jìn)行注冊(cè)。
●eureka.client.fetch-registry:取消服務(wù)獲取功能,關(guān)于服務(wù)獲取,本章后續(xù)會(huì)討論?!馿ureka.client.serviceUrl.defaultZone:如果需要注冊(cè)微服務(wù),可以通過(guò)這個(gè)屬性來(lái)配置服務(wù)治理中心的注冊(cè)地址,完成服務(wù)注冊(cè)的功能。?
啟動(dòng)主程序,訪問(wèn)http://localhost:8761/
可以看到?jīng)]有注冊(cè)任何服務(wù)。
生產(chǎn)者模塊
j-cloud-provider1
依賴,該依賴用來(lái)配置eureka的client服務(wù)。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在該服務(wù)的application添加eureka配置,指明要將服務(wù)注冊(cè)到這個(gè)eureka地址上。這就是服務(wù)注冊(cè)。
配置文件的application name還指明了這個(gè)服務(wù)的名字。
啟動(dòng)類添加注解:@EnableEurekaClient來(lái)聲明其是一個(gè)client(生產(chǎn)者或者消費(fèi)者,在這里他是生產(chǎn)者)
啟動(dòng)該程序,在euraka可以看到該服務(wù)已注冊(cè)到eureka上。這就是服務(wù)發(fā)現(xiàn)。
新建一個(gè)provider2注冊(cè)到eureka,并啟用。
兩個(gè)生產(chǎn)者要用同樣的application name,代表同一個(gè)應(yīng)用的兩個(gè)實(shí)例
(兩個(gè)生產(chǎn)者模塊用來(lái)演示負(fù)載均衡策略)?
架構(gòu)圖
所謂微服務(wù),是指完成某一業(yè)務(wù)功能的獨(dú)立系統(tǒng)。一個(gè)微服務(wù)可以有多個(gè)實(shí)例,所謂實(shí)例,是指一個(gè)具體的服務(wù)節(jié)點(diǎn)。
為什么要有多個(gè)服務(wù)節(jié)點(diǎn)?
1、高可用,即使某個(gè)節(jié)點(diǎn)不可用時(shí),服務(wù)仍可用。
2、高性能,在大并發(fā)情況下,分?jǐn)傉?qǐng)求壓力。
實(shí)例對(duì)Eureka服務(wù)治理中心發(fā)送REST風(fēng)格的請(qǐng)求,將自己的相關(guān)配置發(fā)送到Eureka服務(wù)治理中心完成注冊(cè)。
消費(fèi)者模塊
新建消費(fèi)者模塊consumer并配置。
url的服務(wù)器和端口被定義為了provider-user,與生產(chǎn)者配置項(xiàng)spring.application.name是一致的,這樣Eureka服務(wù)治理中心就知道你在請(qǐng)求哪個(gè)服務(wù)。
@RequestMapping("/hello")
?? ?public String hello(){
?? ??? ?//指出服務(wù)地址 ? http://{服務(wù)提供者應(yīng)用名名稱}/{具體的controller}
?? ??? ?String url="http://provider-user/user/sayHello";
?
?? ??? ?//返回值類型和我們的業(yè)務(wù)返回值一致
?? ??? ?return resttemplate.getForObject(url, String.class);
訪問(wèn)http://localhost:8001/hello
即可以訪問(wèn)到生產(chǎn)者返回的信息。?
負(fù)載均衡
eureka配置了ribbon負(fù)載均衡策略(如果已經(jīng)在模塊中引入了spring-cloud-starter-netflix-eureka-client,它的父pom便會(huì)自動(dòng)引入spring-cloud-starter-netflix-ribbon)
消費(fèi)者的請(qǐng)求會(huì)在客戶端被決定好發(fā)送到哪臺(tái)服務(wù)提供者進(jìn)行處理。
重復(fù)訪問(wèn)消費(fèi)者地址N次,因?yàn)榕渲昧藘蓚€(gè)生產(chǎn)者,http://localhost:8001/hello,會(huì)發(fā)現(xiàn)返回結(jié)果在兩個(gè)provider切換,實(shí)現(xiàn)了負(fù)載均衡
多個(gè)服務(wù)注冊(cè)中心
實(shí)際使用時(shí),部署多個(gè)服務(wù)注冊(cè)中心,防止服務(wù)注冊(cè)中心宕機(jī)導(dǎo)致服務(wù)不可用。?
源碼:2504973175/j-cloud - 碼云 - 開(kāi)源中國(guó) (gitee.com)
Eureka服務(wù)治理原理
Eureka服務(wù)治理有以下幾個(gè)重要概念。
服務(wù)治理中心-就是eureka服務(wù)
服務(wù)提供者--注冊(cè)到eureka上,所以eureka可以對(duì)其進(jìn)行治理。在本文中就是provider-user。
服務(wù)消費(fèi)者-? 服務(wù)的消費(fèi)者會(huì)調(diào)用其他微服務(wù),如本文消費(fèi)者調(diào)用的provider-user,Eureka會(huì)解析類似provider-user這樣的微服務(wù)名稱。解析的過(guò)程是,首先根據(jù)這個(gè)名稱從服務(wù)治理中心獲取服務(wù)提供者的實(shí)例列表,保存在本地,然后通過(guò)特定的負(fù)載均衡的策略確定具體的實(shí)例,最后通過(guò)請(qǐng)求該實(shí)例獲取數(shù)據(jù)。例子中使用了Ribbon來(lái)實(shí)現(xiàn)服務(wù)消費(fèi)。
看另一個(gè)例子
?微服務(wù)實(shí)例和服務(wù)治理中心的關(guān)系
任何的微服務(wù)都可以對(duì)Eureka服務(wù)治理中心(也稱為Eureka服務(wù)端)發(fā)送REST風(fēng)格的請(qǐng)求。在Eureka的機(jī)制中,一般是由具體的微服務(wù)(也稱為Eureka客戶端)來(lái)主動(dòng)維持它們之間的關(guān)系。微服務(wù)向注冊(cè)中心發(fā)送restful風(fēng)格請(qǐng)求,可以請(qǐng)求在服務(wù)中心注冊(cè)、續(xù)約、下線。
注冊(cè):微服務(wù)啟動(dòng)后,向eureka發(fā)消息注冊(cè)自己的實(shí)例。
續(xù)約:微服務(wù)實(shí)例會(huì)按照一個(gè)頻率對(duì)Eureka服務(wù)器維持心跳,告訴Eureka該實(shí)例是可用的,借此來(lái)避免被Eureka服務(wù)端剔除出去
下線:在系統(tǒng)出現(xiàn)故障,需要停止或者重啟某個(gè)微服務(wù)實(shí)例的時(shí)候,在正常操作下,實(shí)例會(huì)對(duì)Eureka發(fā)送下線REST風(fēng)格請(qǐng)求,告知服務(wù)治理中心,這樣客戶端就不能再請(qǐng)求這個(gè)實(shí)例了
服務(wù)治理中心互相關(guān)系
Eureka可以有效地管理具體的微服務(wù)實(shí)例。但是服務(wù)治理中心之間和本身也會(huì)提供一定的服務(wù),甚至可以說(shuō)服務(wù)治理中心也是Eureka客戶端,因?yàn)樗部梢宰?cè)到其他的Eureka服務(wù)器中,被其他的Eureka服務(wù)器治理
相互復(fù)制:Eureka本身也會(huì)相互注冊(cè),以保證高可用和高性能。各個(gè)Eureka服務(wù)器之間也會(huì)相互復(fù)制,也就是當(dāng)微服務(wù)發(fā)生注冊(cè)、下線和續(xù)約這些操作的時(shí)候,Eureka會(huì)將這些消息轉(zhuǎn)發(fā)到其他服務(wù)治理中心的實(shí)例上,這樣就完成同步了
服務(wù)剔除:在實(shí)際的工作中,有時(shí)候有些服務(wù)會(huì)因?yàn)榫W(wǎng)絡(luò)故障、內(nèi)存溢出或者宕機(jī)而導(dǎo)致服務(wù)不能正常工作,這個(gè)時(shí)候就要將這些無(wú)效的服務(wù)實(shí)例剔除出去
●自我保護(hù):用來(lái)檢測(cè)自己是否正常。
微服務(wù)之間互相調(diào)用
服務(wù)獲?。悍?wù)獲取是指微服務(wù)實(shí)例作為Eureka的客戶端,從Eureka服務(wù)治理中心獲取其他微服務(wù)實(shí)例清單的功能,通過(guò)一種負(fù)載均衡的算法選擇其中的一個(gè)實(shí)例進(jìn)行調(diào)用文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-745064.html
●服務(wù)調(diào)用。服務(wù)調(diào)用是指一個(gè)微服務(wù)調(diào)用另一個(gè)微服務(wù)的過(guò)程。在Spring Cloud中,大部分會(huì)采用REST風(fēng)格請(qǐng)求文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745064.html
到了這里,關(guān)于Springcloud筆記(2)-Eureka服務(wù)注冊(cè)中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!