如果商品是一個獨立的服務,訂單系統(tǒng)也是一個獨立的服務,那么它們直接怎么進行交互呢?雖然使用springboot也可以實現(xiàn)兩個服務之間的交互但是存在url硬編碼問題(ip地址修改需要修改配置文件),并且性能低下。

 

那應該怎么解決呢?– 通過服務注冊、發(fā)現(xiàn)的機制來完成。

一、微服務注冊與發(fā)現(xiàn)

 

Spring Cloud快速入門-Eureka

 

由上圖可以看出:

1、服務提供者將服務注冊到注冊中心

2、服務消費者通過注冊中心查找服務

3、查找到服務后進行調用(這里就是無需硬編碼url的解決方案)

4、服務的消費者與服務注冊中心保持心跳連接,一旦服務提供者的地址發(fā)生變更時,注冊中心會通知服務消費者。

 

二、注冊中心:Eureka

 

從Eureka 2.0開始Eureka就已經閉源了,不過對國內影響很小,一方面是因為國內很多都使用Eureka 1.X 系列,另一方面是因為Spring Cloud提供了多種注冊中心的支持,如:consul、ZooKeeper等,如圖所示:

 

Spring Cloud快速入門-Eureka

 

三、原理

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工程:

 

Spring Cloud快速入門-Eureka
Spring Cloud快速入門-Eureka
Spring Cloud快速入門-Eureka

 

點擊“Next”,之后完成創(chuàng)建。

第二步,導入依賴(springboot工程創(chuàng)建中已有依賴):

 

Spring Cloud快速入門-Eureka

 

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

 

Spring Cloud快速入門-Eureka

 

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

 

Spring Cloud快速入門-Eureka

第五步,啟動程序做測試

 

Spring Cloud快速入門-Eureka

 

2. 將商品微服務注冊到Eureka

 

接下來,我們需要將商品的微服務注冊到Eureka服務中。

 

第一步:修改pom文件,引入Spring Cloud的管理依賴以及eureka服務依賴。

 

Spring Cloud快速入門-Eureka

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

 

Spring Cloud快速入門-Eureka

 

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

 

Spring Cloud快速入門-Eureka

第四步,啟動測試

 

Spring Cloud快速入門-Eureka

 

3. 訂單系統(tǒng)從Eureka中發(fā)現(xiàn)商品服務

 

第一步,在訂單系統(tǒng)中添加依賴

 

Spring Cloud快速入門-Eureka

 

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

 

Spring Cloud快速入門-Eureka

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

 

Spring Cloud快速入門-Eureka

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

 

Spring Cloud快速入門-Eureka

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

 

Spring Cloud快速入門-Eureka

 

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

 

Spring Cloud快速入門-Eureka

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)導入依賴

Spring Cloud快速入門-Eureka

 

(2)開啟Feign功能

Spring Cloud快速入門-Eureka

(3)修改ItemService邏輯

Spring Cloud快速入門-Eureka

 

(4)使用ItemService

Spring Cloud快速入門-Eureka