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

由上圖可以看出:
1、服務提供者將服務注冊到注冊中心
2、服務消費者通過注冊中心查找服務
3、查找到服務后進行調用(這里就是無需硬編碼url的解決方案)
4、服務的消費者與服務注冊中心保持心跳連接,一旦服務提供者的地址發(fā)生變更時,注冊中心會通知服務消費者。
二、注冊中心:Eureka
從Eureka 2.0開始Eureka就已經閉源了,不過對國內影響很小,一方面是因為國內很多都使用Eureka 1.X 系列,另一方面是因為Spring Cloud提供了多種注冊中心的支持,如:consul、ZooKeeper等,如圖所示:

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



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

第三步,編寫程序啟動類:

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

第五步,啟動程序做測試:

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

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

第三步,修改啟動類,增加@EnableEureka Client 注解:

第四步,啟動測試:

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

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

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

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

第五步,啟動測試(此時有3個應用:Eureka注冊中心、Item服務、order服務)

在注冊中心 看到有2個客戶端:

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

(2)開啟Feign功能

(3)修改ItemService邏輯

(4)使用ItemService


