Spring Cloud【Finchley】-14 微服務網關Zuul的搭建與使用
文章目錄
官方文檔
Zuul概述
引入網關前后調用流程的變化
搭建單節點的Zuul
Step1. 創建子Module microservice-gateway-zuul
Step2. 添加maven依賴
Step3. 啟動類添加注解 @EnableZuulProxy
Step4. 配置文件application.yml
Step6. 網關功能-路由規則測試
Step7. 網關功能-負載均衡測試
Step8. 網關功能-Hystrix監控測試
代碼
官方文檔
https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_router_and_filter_zuul
Zuul概述
Zuul的主要功能是路由轉發和過濾器。
路由功能是微服務的一部分,比如/api/user轉發到到user服務,/api/shop轉發到到shop服務。
zuul默認和Ribbon結合實現了負載均衡的功能。
引入網關前后調用流程的變化
在微服務架構中,后端服務往往不直接開放給調用端,而是通過一個API網關根據請求的url,路由到相應的服務。網關直接與調用方通信進行權限控制,后將請求均衡分發給后臺服務端
簡單畫2個圖,來說明下引入網關后,調用流程的變化。
不使用網關的情況:
引入網關后:
搭建單節點的Zuul
這里我們會把zuul注冊到Eureka上
Step1. 創建子Module microservice-gateway-zuul
Step2. 添加maven依賴
1
2
3
4
5
6
7
8
9
10
11
官方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); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
通過注解@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:artisan123@localhost:8761/eureka instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
1
2
3
4
5
6
7
8
9
10
11
12
13
觀察上面的配置文件,是沒有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]
1
2
訪問 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
1
2
3
4
5
6
7
8
9
10
重啟下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
NAT Spring 微服務
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。