Spring Cloud【Finchley】-14 微服務閘道器Zuul的搭建與使用
文章目錄
- 官方文件
- Zuul概述
- 引入閘道器前後呼叫流程的變化
- 搭建單節點的Zuul
- Step1. 建立子Module microservice-gateway-zuul
- Step2. 新增maven依賴
- Step3. 啟動類添加註解 @EnableZuulProxy
- Step4. 配置檔案application.yml
- Step6. 閘道器功能-路由規則測試
- Step7. 閘道器功能-負載均衡測試
- Step8. 閘道器功能-Hystrix監控測試
- 程式碼
官方文件
Zuul概述
Zuul的主要功能是路由轉發和過濾器。
路由功能是微服務的一部分,比如/api/user轉發到到user服務,/api/shop轉發到到shop服務。zuul預設和Ribbon結合實現了負載均衡的功能。
引入閘道器前後呼叫流程的變化
在微服務架構中,後端服務往往不直接開放給呼叫端,而是通過一個API閘道器根據請求的url,路由到相應的服務。閘道器直接與呼叫方通訊進行許可權控制,後將請求均衡分發給後臺服務端
簡單畫2個圖,來說明下引入閘道器後,呼叫流程的變化。
不使用閘道器的情況:
引入閘道器後:
搭建單節點的Zuul
這裡我們會把zuul註冊到Eureka上
Step1. 建立子Module microservice-gateway-zuul
Step2. 新增maven依賴
<!-- eureka client 依賴 . Eureka不是必須的 ,在沒有註冊中心的情況下,也可以使用zuul-->
<dependency>
<groupId>org.springframework.cloud< /groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- zuul 依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
官方Note: the Zuul starter does not include a discovery client, so, for routes based on service IDs, you need to provide one of those on the classpath as well (Eureka is one choice). 因為我們使用serverID去做路由,所以我們這裡引入了Eureka
Step3. 啟動類添加註解 @EnableZuulProxy
package com.artisan.microservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class MicroServiceGateWayZuulApplication {
public static void main(String args[]) {
SpringApplication.run(MicroServiceGateWayZuulApplication.class, args);
}
}
通過註解@EnableZuulProxy宣告一個zuul代理,這個代理整合了Ribbon來定位註冊在Eureka上的微服務,同時還整合了hystrix實現容錯,所有經過zuul的請求都會在Hystrix命令中執行。
Step4. 配置檔案application.yml
server:
port: 4534
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://artisan:[email protected]:8761/eureka
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
觀察上面的配置檔案,是沒有zuul相關的配置的,我們僅僅添加了一個zuul的依賴,同時將zuul註冊到Eureka上。 至此,一個單節點的最精簡版的zuul就搭建完成了,當然了zuul支援各種配置,我們的這個demo只是沒有用到而已。
Step6. 閘道器功能-路由規則測試
- 啟動註冊中心Eureka Server 專案 microservice-discovery-eureka
- 啟動服務提供者micorservice-provider-user
- 啟動服務消費者 micorservice-consumer-movie-ribbon
- 啟動zuul閘道器microservice-gateway-zuul
啟動zuul的時候,可以看到如下日誌
Mapped URL path [/microservice-provider-user/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController]
Mapped URL path [/micorservice-consumer-movie-ribbon/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController]
訪問 Eureka Server頁面 http://localhost:8761/ ,檢視服務註冊情況
驗證下路由轉發的功能
通過配置檔案,我們知道zuul服務的啟動埠為 4534 ,
通過zuul訪問服務提供者提供的服務看下
http://localhost:4534/microservice-provider-user/user/3
url中的microservice-provider-user為註冊在eureka上的微服務的名稱
服務被轉發到了microservice-provider-user微服務中 ,相當於請求 http://localhost:8900/user/3
同理,通過zuul訪問服務消費者
http://localhost:4534/micorservice-consumer-movie-ribbon/movie/4
服務被轉發到了micorservice-consumer-movie-ribbon微服務中 ,相當於請求 http://localhost:7902/movie/4
預設情況下,zuul會代理所有註冊在Eureka Server上的微服務,並且Zuul的路由規則為 http://zuul_host:zuul_port/微服務在EurekaServer上的serviceId/** 被轉發到serviceId對應的微服務上。
Step7. 閘道器功能-負載均衡測試
- 啟動註冊中心Eureka Server 專案 microservice-discovery-eureka
- 啟動多個服務提供者micorservice-provider-user ,在sts中換個埠,可啟動多個,再加個8901埠上的服務
- 啟動服務消費者 micorservice-consumer-movie-ribbon
- 啟動zuul閘道器microservice-gateway-zuul
訪問 Eureka Server頁面 http://localhost:8761/ ,檢視服務註冊情況
訪問兩次服務提供者提供的服務,觀察後臺日誌
http://localhost:4534/microservice-provider-user/user/3 ,
8900:
8901:
說明zuul整合了Ribbon負載均衡的功能
Step8. 閘道器功能-Hystrix監控測試
根據前幾篇的學習 Spring Cloud【Finchley】-10Hystrix監控 我們知道要想實現Hystrix監控中,必須要有如下幾個依賴
檢視zuul微服務的pom依賴
前兩個具備了,只需要修改下applicaiton.yml即可。
增加配置,開啟端點監控
#actuator 啟用所有的監控端點 “*”號代表啟用所有的監控端點,可以單獨啟用,例如,health,info,metrics
# spring boot 升為 2.0 後,為了安全,預設 Actuator 只暴露了2個端點,heath 和 info
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
重啟下microservice-gateway-zuul微服務
訪問zuul的hystrix.stream http://localhost:4534/actuator/hystrix.stream
說明application.yml中的配置生效了。 ping 說明還未有服務呼叫,接下來呼叫下服務 ,就可以看到了
接下來我們用Dashboard來直觀的看下
訪問micorservice-hystrix-dashboard提供的頁面 http://localhost:8888/hystrix
地址輸入zuul服務的 hystrix stream地址 http://localhost:4534/actuator/hystrix.stream , title 任意,點選Monitor Stream
多訪問幾次 http://localhost:4534/microservice-provider-user/user/3 ,觀察資料的變化 ,如下
通過以上示例,說明zuul已經整合了Hystrix監控。 容錯後面來單獨討論
程式碼
https://github.com/yangshangwei/SpringCloudMaster/tree/master/microservice-gateway-zuul