當前位置:
首頁 > 知識 > Spring Cloud網關Zuul&過濾器&集群方案

Spring Cloud網關Zuul&過濾器&集群方案

Spring Cloud網關Zuul&過濾器&集群方案

Zuul


前期準備

按照我之前的文章《極簡Spring Boot搭建、開發、部署》、《Spring Cloud註冊中心——Eureka&集群》創建Eureka註冊中心(單機版即可),以及兩個服務:order-service(埠1111)、user-service(埠2222),get請求返迴文本,如下:

Spring Cloud網關Zuul&過濾器&集群方案

Order Service

Spring Cloud網關Zuul&過濾器&集群方案

User Service


Zuul

參考之前的文章創建zuul-service工程,依賴選擇Web、Eureka Discovery、Zuul。pom文件就不附圖了。

代碼:

Spring Cloud網關Zuul&過濾器&集群方案

代碼

如圖,就多加一個@EnableZuulProxy。

application.yml

Spring Cloud網關Zuul&過濾器&集群方案

application.yml

注意紅框path是我們在瀏覽器、前端APP、其他微服務上訪問的url,serviceId是之前兩個工程的application name。

這是按照serviceId來進行路由的,還有一種是用url,這裡就不寫了。

結果:

啟動所有工程,Eureka監控頁面如下:

Spring Cloud網關Zuul&過濾器&集群方案

Eureka監控頁面

單獨訪問兩個Service,與通過Zuul路由過去訪問頁面對比:

Spring Cloud網關Zuul&過濾器&集群方案

User Service

Spring Cloud網關Zuul&過濾器&集群方案

Order Service


Zuul過濾器

使用路由有一個很直接的好處,就是可以對訪問進行某種統一的處理。

比如你有N個微服務,都要求有許可權的客戶端訪問(比如本例使用的Access Token)。如果所有的微服務都要搞一個Access Token校驗的話,那也太Low了。用Zuul就可以了,統一鑒權。

自定義過濾器代碼:

繼承ZuulFilter

Spring Cloud網關Zuul&過濾器&集群方案

代碼1

Spring Cloud網關Zuul&過濾器&集群方案

代碼2

Spring Cloud網關Zuul&過濾器&集群方案

代碼3

這裡主要說一下filterType,有4個值:

pre:進行路由前調用;

routing:進行路由的時候調用;

error:發生錯誤時調用;

post:routing&error之後調用;

實例化:
Spring Cloud網關Zuul&過濾器&集群方案

實例化

結果:

啟動4個服務,分別輸入如下圖的URL,結果如下:

Spring Cloud網關Zuul&過濾器&集群方案

AccessToken為null

Spring Cloud網關Zuul&過濾器&集群方案

AccessToken為空字元串

Spring Cloud網關Zuul&過濾器&集群方案

AccessToken正確

後台日誌:

Spring Cloud網關Zuul&過濾器&集群方案

後台日誌

過濾器之間傳遞數據:

實際開發中,我們可能需要配置多個過濾器,比如第一個過濾器是校驗用戶名、密碼,第一個過濾器是校驗此用戶的是否有訪問請求URL的許可權。如果第一個通過了,則繼續執行過濾器2,如果第一個沒通過,過濾器2就不執行。

我們先在第一個過濾器中的校驗代碼里增加如下代碼:

Spring Cloud網關Zuul&過濾器&集群方案

過濾器傳數據

在第二個過濾器里增加如下代碼:

Spring Cloud網關Zuul&過濾器&集群方案

獲取數據


Zuul的高可用

因為所有的請求都要從Zuul過,生產環境中它的高可用就是必須的了。

簡單的說,Zuul我們可以把他們當成普通的微服務,所以我們可以部署多個,然後註冊到Eureka註冊中心,A微服務調用其中某個Zuul服務,再通過它轉發到B服務。

這種場景適用於內部調用,對於外部調用來說(比如網頁、手機客戶端、第三方請求),人家總不能再去註冊你的Eureka服務端吧,再說把Eureka註冊中心暴露在外網也很不安全。

可以用如下辦法解決,對於Zuul來說暴露在外面的也就是URL,我們可以使用Nginx對外暴露一個URL,然後轉發到Zuul服務,Nginx還有負載均衡。

具體可以參考我之前的文章《Keepalived+Nginx高可用安裝部署(含Nginx+Tomcat負載均衡)》,文章是通過Nginx把請求轉發到多個Tomcat,現在我們可以改成轉發到多個Zuul服務上。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java個人學習心得 的精彩文章:

Spring Cloud註冊中心——Eureka&集群
極簡Spring Boot搭建、開發、部署
對於Zookeeper一些面試題自己的答案
對於Dubbo一些面試題自己的答案
Dubbo消費者提供者簡單例子

TAG:Java個人學習心得 |

您可能感興趣

Grafana+Telegraf+Influxdb監控Tomcat集群方案
ganglia集群版搭建(支持hadoop和spark)
如何使用Rancher 2.0在Kubernetes集群上部署Istio
Keepalived+LVS+nginx搭建nginx高可用集群
SpringCloud實現Eureka集群配置
如何為Kafka集群選擇合適的Topic/Partitions數量
使用 kubeadm 搭建 kubernetes1.10 集群
使用Kubespray部署生產可用的Kubernetes集群
SpringCloud如何實現Eureka集群、HA機制?
redis單點、主從、哨兵sentinel,集群cluster配置使用
docker zookeeper 集群搭建
tomcat集群和session共享
如何在本地數據中心安裝Service Fabric for Windows集群
Docker環境下搭建DNS LVS(keepAlived) OpenResty伺服器簡易集群
如何在Kubernetes中管理和操作Kafka集群
如何在 Kubernetes 環境中運行 Spark 集群
大規模集群下的Hadoop NameNode
Nacos發布 v0.2 版本,支持 Spring Cloud 微服務高可用集群模式
scrapydweb:實現 Scrapyd 集群管理,Scrapy 日誌分析和可視化
集群管理工具KafkaAdminClient——原理與示例