spring cloud微服務(二)搭建一個簡易的微服務結構
今天我們將搭建一個最簡易的微服務結構:serviceA+eureka+serviceB的結構。
(一)準備工作
在此之前,你需要會一些springboot基礎,知道如何搭建springboot結構的專案。
此處為小白同學們提供一個基於搭建springboot+mybatis+oracle專案的學習連結:
https://blog.csdn.net/qq_38050852/article/details/83186799(二)結構圖

註冊關係圖
我們將搭建eureka-server端,然後搭建serviceA和serviceB作為eureka的客戶端註冊到eureka服務端,並完成serviceA呼叫serviceB。
(三)搭建eureka-server
該專案基於IDEA搭建。
1.新建一個工程

2.起個名字

3.選版本,選依賴

4.選專案位置,結束

5.開啟application.properties進行編寫

圖示
程式碼如下:
#服務埠號 server.port=8761 #服務名稱 (若是叢集的服務名稱要相同) spring.application.name=eureka #eueka註冊中心ip eureka.instance.hostname=127.0.0.1 #是否需要註冊到註冊中心(如果只有單個eureka,由於自己就是註冊中心,是不需要自己註冊自己的,所以是false。如果是叢集,由於需要相互註冊,就需要置為true) eureka.client.register-with-eureka=false #是否需要發現服務資訊(叢集的時候需要相互註冊為true,單個服務為false,理由同上) eureka.client.fetch-registry=false #註冊地址 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ #本地開發時關閉自我保護機制,不可用服務及時剔除 eureka.server.enable-self-preservation=false #本地開發時關閉自我保護機制,不可用服務及時剔除,間隔2秒鐘發現服務不可用即剔除 eureka.server.eviction-interval-timer-in-ms=2000
6.啟動項加上允許作為eureka服務端的註解@EnableEurekaServer

圖示
7.執行啟動項

執行成功
8.執行成功後可進行頁面訪問

eureka頁面
至此,eureka服務端搭建完畢,我們快快再搭幾個服務註冊進去吧~
我們總結一下eureka服務端的三個關鍵點:
一個是我們在建專案時選的Eureka Server依賴,IDEA自動幫我們生成了pom.xml,當然如果不選我們也可以自己手動加進去,如圖

eureka-server依賴
再一個是我們的application.properties檔案的配置;
最後一個便是啟動項上的@EnableEurekaServer註解。
掌握這三點,搭建eureka服務端便不在話下。
注意事項:關於為何推薦IDEA勾選依賴生成pom檔案:為何不手動新增依賴呢?由於springboot還不夠穩定,1.5版本跟2.x版本依賴名稱區別很大。再加上springboot版本跟springcloud版本一致性問題,依賴的名稱會多多少少會因為版本問題導致不一致。具體踩坑參見我的有道雲筆記:
http://note.youdao.com/noteshare?id=25494c1f03d25c090010d267f0709df9&sub=A72B88850DB144E8B2F66E477F96C65B
新人沒有必要在版本問題上浪費過多時間,所以個人推薦IDEA勾選生成pom
(四)搭建service-a和service-b並註冊到註冊中心
1.新建工程

2.專案元資料

,其他依賴我們後續再手動加。

選依賴
5.配置application.properties
#埠號 server.port=8081 #服務名稱 spring.application.name=service-a ##======================eureka=====================## #是否以ip地址進行註冊 eureka.instance.prefer-ip-address=true #是否註冊 eureka.client.register-with-eureka=true #是否需要從eureka上獲取資訊 eureka.client.fetch-registry=true #註冊地址 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ #心跳檢測與續約時間(本地開發時將時間設定小些,保證服務關閉後註冊中心及時剔除服務) #eureka客戶端向服務端傳送心跳的時間間隔,單位為秒 eureka.instance.lease-renewal-interval-in-seconds=1 #eureka服務端在收到最後一次心跳之後等待的時間上限,單位為秒,超過則剔除 eureka.instance.lease-expiration-duration-in-seconds=2 ##======================eureka=====================##
6.啟動項加上允許作為eureka客戶端的註解@EnableEurekaClient並啟動專案

啟動成功
7.開啟euraka-server的介面,我們發現,serviceA已經註冊到eureka了

eureka介面
8.我們以同樣的步驟建立serviceB並啟動,將serviceA和serviceB都註冊到eureka服務端。

eureka介面
至此服務註冊我們已搭建完畢~
我們總結一下eureka客戶端的關鍵點:
一個是我們在建專案時選的Web依賴和Eureka Client依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
feign依賴用於遠端呼叫暫且我們還沒用到,只是建專案的時候順手生成了一下;
再一個是我們的 application.properties 檔案的配置和啟動項上的@EnableEurekaServer註解。
(五)基於feign實現service-a和service-b之間的遠端呼叫
0.關於依賴,我們需要引入feign依賴。由於之前我們建立專案的時候勾選了feign依賴,IDEA已自動幫我們生成了feign依賴。沒有依賴的小夥伴可以手動新增進去
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
1.需求:我們來假設一個場景,我們的serviceA的controller只能輸出“張三”,而serviceB需要呼叫serviceA的“張三”再加上自己本身輸出的“正在工作”從而輸出一句完成的話“張三正在工作”。
示意圖如下:

需求示意圖
2.在serviceA和serviceB專案分別建立controller和feign資料夾

(注意:此處只做簡單的controller層程式碼示範,service層程式碼及dao層程式碼不實現)
3.在A服務建立AController

AController.java
4.在B服務建立BController

BController.java
5.在服務B建立專門呼叫A服務的feign介面,命名為AFeign.java

AFeign.java
注意介面要與AController.java一致、@FeignClient註解的value要與A服務的註冊中心服務名一致。
6.在BController呼叫AFeign

feign呼叫
7.在需要用feign呼叫的專案的啟動項上加上@EnableFeignClients註解,該示例中由於是B服務需要呼叫A服務,所以B的啟動項上需要加上允許作為Feign客戶端的註解@EnableFeignClients

B服務的啟動項
8.分別啟動eureka,service-a,service-b,進行測試
呼叫A服務的getWho方法:

getWho
呼叫B服務的getWhatDoing方法:

getWhatDoing
呼叫B服務的getAll方法:

getAll
至此服務呼叫我們已搭建完畢~
微服務最基礎的結構我們已經瞭解了,下次我們將學習服務容錯hystrix。
最後為了方便大家學習,附上github原始碼。
https://github.com/mengyuya/springcloud-teach-2-demo