Spring Cloud快速入門-Eureka
如果商品是一個(gè)獨(dú)立的服務(wù),訂單系統(tǒng)也是一個(gè)獨(dú)立的服務(wù),那么它們直接怎么進(jìn)行交互呢?雖然使用springboot也可以實(shí)現(xiàn)兩個(gè)服務(wù)之間的交互但是存在url硬編碼問題(ip地址修改需要修改配置文件),并且性能低下。
那應(yīng)該怎么解決呢?– 通過(guò)服務(wù)注冊(cè)、發(fā)現(xiàn)的機(jī)制來(lái)完成。
一、微服務(wù)注冊(cè)與發(fā)現(xiàn)

由上圖可以看出:
1、服務(wù)提供者將服務(wù)注冊(cè)到注冊(cè)中心
2、服務(wù)消費(fèi)者通過(guò)注冊(cè)中心查找服務(wù)
3、查找到服務(wù)后進(jìn)行調(diào)用(這里就是無(wú)需硬編碼url的解決方案)
4、服務(wù)的消費(fèi)者與服務(wù)注冊(cè)中心保持心跳連接,一旦服務(wù)提供者的地址發(fā)生變更時(shí),注冊(cè)中心會(huì)通知服務(wù)消費(fèi)者。
二、注冊(cè)中心:Eureka
從Eureka 2.0開始Eureka就已經(jīng)閉源了,不過(guò)對(duì)國(guó)內(nèi)影響很小,一方面是因?yàn)閲?guó)內(nèi)很多都使用Eureka 1.X 系列,另一方面是因?yàn)镾pring Cloud提供了多種注冊(cè)中心的支持,如:consul、ZooKeeper等,如圖所示:

三、原理
Eureka包含兩個(gè)組件:Eureka Server和Eureka Client。
Eureka Server提供服務(wù)注冊(cè)服務(wù),各個(gè)節(jié)點(diǎn)啟動(dòng)后,會(huì)在Eureka Server中進(jìn)行注冊(cè),這樣EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到。
Eureka Client是一個(gè)java客戶端,用于簡(jiǎn)化與Eureka Server的交互,客戶端同時(shí)也就別一個(gè)內(nèi)置的、使用輪詢(round-robin)負(fù)載算法的負(fù)載均衡器。
在應(yīng)用啟動(dòng)后,將會(huì)向Eureka Server發(fā)送心跳,默認(rèn)周期為30秒,如果Eureka Server在多個(gè)心跳周期內(nèi)沒有接收到某個(gè)節(jié)點(diǎn)的心跳,Eureka Server將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)。
Eureka Server之間通過(guò)復(fù)制的方式完成數(shù)據(jù)的同步,Eureka還提供了客戶端緩存機(jī)制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費(fèi)其他服務(wù)的API。綜上,Eureka通過(guò)心跳檢查、客戶端緩存等機(jī)制,確保了系統(tǒng)的高可用性、靈活性和可伸縮性。
1. 編寫Eureka Server
第一步:創(chuàng)建SpringBoot工程:



點(diǎn)擊“Next”,之后完成創(chuàng)建。
第二步,導(dǎo)入依賴(springboot工程創(chuàng)建中已有依賴):

第三步,編寫程序啟動(dòng)類:

第四步,編寫application.yml配置文件:

第五步,啟動(dòng)程序做測(cè)試:

2. 將商品微服務(wù)注冊(cè)到Eureka
接下來(lái),我們需要將商品的微服務(wù)注冊(cè)到Eureka服務(wù)中。
第一步:修改pom文件,引入Spring Cloud的管理依賴以及eureka服務(wù)依賴。

第二步,修改application.yml配置文件:

第三步,修改啟動(dòng)類,增加@EnableEureka Client 注解:

第四步,啟動(dòng)測(cè)試:

3. 訂單系統(tǒng)從Eureka中發(fā)現(xiàn)商品服務(wù)
第一步,在訂單系統(tǒng)中添加依賴:

第二步,修改application.yml配置文件:

第三步,在啟動(dòng)類中添加@EnableEurekaClient注解 ,獲取RestTemplate的方法上加 @Load Balanced注解

第四步,修改ItemService的實(shí)現(xiàn)邏輯:

第五步,啟動(dòng)測(cè)試(此時(shí)有3個(gè)應(yīng)用:Eureka注冊(cè)中心、Item服務(wù)、order服務(wù))

在注冊(cè)中心 看到有2個(gè)客戶端:

4. 訂單系統(tǒng)從Eureka中發(fā)現(xiàn)商品服務(wù)2(Fegin的使用)
Feign是一種負(fù)載均衡的HTTP客戶端, 使用Feign調(diào)用API就像調(diào)用本地方法一樣,從而避免了調(diào)用目標(biāo)微服務(wù)時(shí),需要不斷的解析/封裝json數(shù)據(jù)的繁瑣。
Fegin是一個(gè)聲明似的web服務(wù)客戶端,它使得編寫web服務(wù)客戶端變得更加容易。使用Fegin創(chuàng)建一個(gè)接口并對(duì)它進(jìn)行注解。它具有可插拔的注解支持包括Feign注解與JAX-RS注解,F(xiàn)eign還支持可插拔的編碼器與解碼器,Spring Cloud 增加了對(duì) Spring MVC的注解,Spring Web 默認(rèn)使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的負(fù)載均衡的HTTP客戶端 Feign。
(1)導(dǎo)入依賴

(2)開啟Feign功能

(3)修改ItemService邏輯

(4)使用ItemService


