微服務架構開發實戰:如何集成Zuul和實現API網關?

2020-09-15 程式設計師高級碼農II

如何集成 Zuul

本節將基於Zuul來實現API網關。作為Spring Cloud 的一部分,集成Zuul會變得非常簡單。

Zuul簡介

路由是微服務架構中必需的一部分,如「」可能映射到Web程序上、「/api/users」可能映射到用戶服務上、「/api/shop」可能映射到商品服務商。通過路由,讓不同的服務都集中到統一的入口上來,這就是API網關的作用。

Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。

Zuul 功能如下。

  • 認證。
  • 壓力測試。
  • 金絲雀測試。
  • 動態路由。
  • 負載削減。
  • 安全。
  • 靜態響應處理。
  • 主動/主動交換管理。

Zuul的規則引擎允許通過任何JVM語言來編寫規則和過濾器,支持基於Java和Groovy的構建。

在micro-weather-cureka-client的基礎上稍作修改,即可成為一個新的應用micro-weather-cure-ka-client-zuul,將其作為示例。

所需環境

為了演示本例,需要採用如下開發環境。

.JDK8。

. Gradle 4.0。

Spring Boot 2.0.0.M3。

.Spring Cloud Starter Netflix Eureka Client Finchley.M2。

.Spring Cloud Starter Netflix Zuul Finchley.M2。

更改配置

要使用Zuul,最簡單的方式莫過於添加Zuul依賴。

dependencies{/l...//添加Spring Cloud Starter Netflix Zuul依賴compile(&39;)}

使用Zuul

要啟用Zuul,最簡單的方式就是在應用的根目錄Application類上添加org.springframework.cloud.netflix.zuul.EnableZuulProxy註解。

package com.waylau.spring.cloud.weather;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;/**主應用程式.**@since 1.0.0 2017年11月05日* author <a href=&34;>Way Lau</a>*/@SpringBootApplicationEnableDiscoveryClient@EnableZuulPrOxypublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}}

其中,@EnableZuulProxy啟用了Zuul作為反向代理伺服器。

最後,修改application.properties。修改為如下配置。

spring.application.name: micro-weather-eureka-client-zuuleureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/zuul.routes.hi.path: /hi/**zuul.routes.hi.serviceId: micro-weather-eureka-client

其中:

  • zuul.routes.hi.path :為要攔截請求的路徑;
  • zuul.routes.hi.serviceld:為要攔截請求的路徑所要映射的服務。本例將所有/hi下的請求,都轉發到micro-weather-eureka-client應用中去。

運行和測試

啟動在之前章節中創建的micro-weather-eureka-server和micro-weather-eureka-client兩個項目,以及本例的micro-weather-eureka-client-zuul項目。

如果一切正常,那麼micro-weather-eureka-server運行的管理界面能看到上述服務的信息。

通過瀏覽器訪問micro-weather-zuul服務(本例地址為http:/localhost:8080),當試圖訪問接口時,如果一切正常,可以在控制臺看到「Hello world」字樣,這就是轉發請求到micro-weather-eu-reka-client服務時響應的內容,如圖10-3所示。

源碼

本節示例所涉及的源碼,見micro-weather-cureka-server、micro-weather-cureka-client,以及mi-cro-weather-cureka-client-zuul。

實現API網關

本節將在天氣預報系統中使用API網關。

下面基於Zuul來實現API網關,由這個API網關來處理所有的用戶請求。API網關將根據不同的請求路徑,將請求路由到不同的微服務中去。

之前的天氣預報微服務msa-weather-report-eureka-feign最初是依賴於天氣數據API微服務及城市數據API微服務。現在把這兩個API微服務都合併到了API網關中,由API網關來負責請求的轉發。那麼,最後新的天氣預報微服務就只需要依賴於API網關即可。這裡將新的應用命名為msa-weather-report-eureka-feign-gatewayo

在前面創建的micro-weather-eureka-client-zuul應用基礎之上,再創建一個新的應用msa-weath-er-eureka-client-zuul,作為本節的API網關示例程序。

配置API網關

修改msa-weather-eureka-client-zuul的 application.properties配置文件。修改為如下配置。

spring.application.name: msa-weather-eureka-client-zuuleureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/zuul.routes.city.path:/city/**zuul.routes.city.serviceId: msa-weather-city-eurekazuul.routes.data.path:/data/**zuul.routes.data.serviceId:msa-weather-data-eureka

圖10-4所示的是API網關的路由規則:當訪問的路徑匹配「city」時,則API網關將請求轉發到msa-weather-city-eureka微服務中去;當訪問的路徑匹配「data」時,則API網關將請求轉發到msa-weather-data-eureka微服務中去。

修改新的天氣預報微服務

在msa-weather-report-cureka-feign的基礎上稍作修改,就能成為新版的msa-weather-report-cu-reka-feign-gateway。

主要的修改項集中在Feign&34;https://waylau.com&34;msa-weather-eureka-client-zuul&34;/city/cities&34;/data/weather/cityId/{cityId}&34;cityId&34;https://waylau.com&34;https://waylau.com&34;/report&34;/cityId/{cityId}&34;cityId&34;獲取城市信息異常!&34;獲取城市信息異常!&34;title&34;老衛的天氣預報&34;cityId&34;cityList&34;report&34;weather/report&34;reportModel&熱部署靜態文件spring.thymeleaf.cache=falsespring.application.name: msa-weather-report-eureka-feign-gatewayeureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/feign.client.config.feignName.connectTimeout:5000feign.client.config.feignName.readTimeout: 5000

運行微服務實例

首先運行Eureka Server實例micro-weather-eureka-server,它在8761埠啟動。

其次要運行Redis伺服器。

而後分別在8081和8082上啟動msa-weather-collection-cureka-feign實例兩個,在8083和8084上啟動msa-weather-data-eureka實例兩個,在8085和 8086上啟動msa-weather-city-eureka實例兩個,在8087和8088上啟動msa-weather-report-cureka-feign-gateway實例兩個,在8089上啟動msa-weather-cureka-client-zuul API 網關實例。啟動腳本如下。

java-jar msa-weather-collection-eureka-feign-1.0.0.jar --server.port=8081java-jar msa-weather-collection-eureka-feign-1.0.0.jar--server.port=8082java -jar msa-weather-data-eureka-1.0.0.jar --server.port=8083java -jar msa-weather-data-eureka-1.0.0.jar --server.port=8084java -jar msa-weather-city-eureka-1.0.0.jar --server.port=8085java -jar msa-weather-city-eureka-1.0.0.jar--server.port=8086java-jar msa-weather-report-eureka-feign-gateway-1.0.0.jar --server.port=8087java -jar msa-weather-report-eureka-feign-gateway-1.0.0.jar --server.port=8088java-jar msa-weather-eureka-client-zuul-1.0.0.jar --server.port=8089

這樣,就可以在Eureka Server上看到這8個實例的信息。訪問http:/localhost:8761,可以看到如圖9-3所示的Eureka Server自帶的UI管理界面。

訪問天氣預報微服務的任意一個實例,都能夠正常使用天氣數據微服務和城市數據微服務。如在瀏覽器訪問其中一個實例( http://localhost:8088/report/cityld/101280601)來進行測試。

源碼

本節示例所涉及的源碼,見micro-weather-eureka-server、msa-weather-collection-cureka-feign、msa-weather-data-eureka、msa-weather-city-eureka、msa-weather-report-eureka-feign-gateway .micro-weather-eureka-client-zuul,以及msa-weather-eureka-client-zuul。

本篇文章內容給大家講解的是如何集成 Zuul和實現API網關

  1. 下篇文章給大家講解微服務的部署與發布;
  2. 覺得文章不錯的朋友可以轉發此文關注小編;
  3. 感謝大家的支持!

相關焦點

  • 微服務架構開發實戰:API網關意義和常見API網關的實現方式
    路由:是API網關很核心的模塊功能,此模塊實現根據請求鎖定目標微服務,並將請求進行轉發。API網關所帶來的好處API網關能夠為外部消費方提供一套統一的入口點,且不會受到內部微服務的具體數量與組成的影響。API網關為微服務架構系統帶來了如下好處。
  • API網關(Gateway)服務Zuul很難?看這一篇就夠了
    1、什麼是API網關API網關是所有請求的入口,承載了所有的流量,API Gateway是一個門戶一樣,也可以說是進入系統的唯一節點。這跟面向對象設計模式中的Facet模式很像。API Gateway封裝內部系統的架構,並且提供API給各個客戶端。
  • Springboot與Zuul網關項目實戰
    Spring Cloud Zuul是整合Netflflix公司的Zuul開源項目實現的微服務網關,它實現了請求路由、負載均衡、校驗過慮等 功能。官方:https://github.com/Netflflix/zuul什麼是網關?
  • 聊聊API網關的作用
    2、對於內網的API網關,在起到的作用上來說可以認為是微服務網關,也可以認為是內網的API服務治理平臺。 當企業將所有的應用使用微服務的架構管理起來,那麼API網關就起到了微服務網關的作用。 而當企業只是將系統與系統之間的調用使用rest api的方式進行訪問時使用API網關對調用進行管理,那麼API網關起到的就是API服務治理的作用。
  • 網關如何聚合各個微服務的接口文檔?
    歡迎關注頭條號:老顧聊技術精品原創技術分享,知識的組裝工背景在之前老顧的文章中,介紹過利用swagger實現api文檔,我們每個微服務都有自己的一套api接口,那我們開發人員進行開發的時候,但一般也不會在網關項目代碼裡寫業務API代碼。所以這裡的集成只是基於WebMvc的微服務項目。
  • 網關基礎應用
    如果團隊正在使用微服務架構搭建服務體系,或者正在考慮向微服務架構轉型,那麼應該熟悉網關,至少應該了解網關模式,網上有關於API gateway pattern模式的詳細描述。微服務架構的API 網關作為服務的單一入口,集成許多API管理和監控層面問題,比如api路由、api鑑權、api監控、灰度發布等典型網際網路應用問題。
  • Gateway - 網關應用
    如果團隊正在使用微服務架構搭建服務體系,或者正在考慮向微服務架構轉型,那麼應該熟悉網關,至少應該了解網關模式,網上有關於API gateway pattern模式的詳細描述。微服務架構的API 網關作為服務的單一入口,集成許多API管理和監控層面問題,比如api路由、api鑑權、api監控、灰度發布等典型網際網路應用問題。
  • SpringCloud微服務架構篇6:API服務網關-Zuul
    API服務網關是微服務訪問的統一入口,負責服務請求路由、組合及協議轉換等處理。API服務網關幫助開發者隱藏系統架構實現的細節,提供統一的入口供客戶端訪問,讓微服務使用更為友好。通過微服務的統一訪問控制,簡化了客戶端開發的複雜度,降低了客戶端與微服務之間的通信次數,客戶端不需要與多個微服務之間進行通信,也不需要了解各個微服務的詳細服務。藉助API服務網關可統一做切面任務,避免每個微服務自己開發,提升效率,使系統更加標準化。
  • 微服務入門:Openresty實現API網關
    如果採用微服務架構,那一個項目中微服務節點很多,如果讓每一個節點都去處理上面這些 「鑑權認證功能、Session處理、安全檢查、日誌處理等」 會多出很多冗餘的代碼,也會給增加業務代碼的複雜度,因此就需要有一個API網關把這些公共的功能獨立出來成為一個服務來統一的處理這些事情。
  • springcloud的微服務開發日記之五(zuul路由轉發)
    2018年的日程安排如下:記錄springcloud開發微服務的全過程記錄vue實現的知識圖譜服務記錄中醫理論在知識圖譜上的應用每天一個小目標,做比昨天更好的自己博客地址 i.drai.top有興趣的可以關注一下,共同進步另:關注後可點擊頭條號的「源碼」連結,有空閒時間我會不定期的上傳源碼以供參考
  • 微服務架構下的API接口驅動開發,設計和集成
    在這個工作完成後,後續各個模塊的設計開發工作才能夠真正並行起來。也就是說:只要各個模塊是按照預先定義好的接口進行設計開發的,那麼最終各個模塊就一定能夠集成起來。架構師不單是做了分而治之的分解工作,而是通過接口解決了分解後的集成問題。即使到了現在微服務架構模式下,對於究竟拆分為多少個模塊,每個模塊應該暴露哪些API接口服務應該是自頂向下方式,由架構師統一進行規劃和設計。
  • 微服務技術棧:API網關中心,落地實現方案
    二、網關模式1、模式對比這裡對比常用的請求服務管理模式,和網關模式,如圖:常規模式在沒有網關的情況下,微服務架構會在業務層服務上提供一個API服務,用來接收參數;該模式下的缺點非常明顯,每個Client-API都需要實現一套非業務服務,代碼冗餘,當系統膨脹之後,維護成本極高,適用於輕量級系統架構。
  • 建設微服務API網關的一些實踐
    原文地址:https://fredal.xin/build-api-gateway原文作者:fredal的博客隨著這些年微服務的流行,API網關已經成為微服務架構中不可或缺的一環而在我們的實現中,認為網關是一個只訂閱不註冊的微服務而已,區別是微服務應用發起rpc調用指定了調用服務,而網關接收請求分發只有url信息。這可以通過簡單的改造來復用已有微服務框架的服務發現功能。
  • SpringCloud中Zuul網關原理及其配置,看它就夠了
    Zuul是spring cloud中的微服務網關。網關:是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。
  • 微服務去中心化架構下為何還要用API網關
    如果僅僅是實現接口轉發,那麼Ngnix反向代理也可以完全實現,因此當前架構也可以看到很多的微服務架構體系並沒有採用API網關。微服務註冊和微服務API接口註冊在微服務架構裡面的註冊一定要將微服務註冊和微服務API接口註冊兩個概念分開。
  • 微服務技術棧:API網關中心,落地實現方案
    ,每個Client-API都需要實現一套非業務服務,代碼冗餘,當系統膨脹之後,維護成本極高,適用於輕量級系統架構。2、定製開發定製開發例如:權限校驗,日誌集成,接口限流,等相關功能,需要和資料庫交互,可以做成獨立服務,在服務中實現具體的處理邏輯,網關層直接調用即可。
  • 全面的講解SpringCloud中Zuul網關原理及其配置,看它就夠了
    Zuul是spring cloud中的微服務網關。網關:是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。
  • SpringCloud網關及Zuul項目搭建,你確定你了解?
    一、網關概念1、什麼是路由網關網關是系統的唯一對外的入口,介於客戶端和伺服器端之間的中間層,處理非業務功能 提供路由請求、鑑權、監控、緩存、限流等功能。微服務網關介於服務端與客戶端的中間層,所有外部服務請求都會先經過微服務網關客戶只能跟微服務網關進行交互,無需調用特定微服務接口,使得開發得到簡化
  • API 網關選型及包含 BFF 的架構設計
    如上圖雖然在 API Gateway 的位置上寫的是 spring cloud gateway,然而也可以採用像 zuul、zuul2 這些同樣是 java 語言開發的組件。同時,它支持 websockets,和 Spring 框架緊密集成。從目前來看,gateway替代zuul是趨勢。基於以上這些,綜合考慮在架構中使用Spring Cloud Gateway。
  • 微服務實戰系列(六)-網關springcloud zuul
    場景描述今天接著介紹springcloud,今天介紹下springcloud的路由網關-Zuul,外圍系統或者用戶通過網關訪問服務,網關通過註冊中心找到對應提供服務的客戶端,網關也需要到註冊中心進行註冊。