當前位置:
首頁 > 最新 > Spring Cloud入門教程-Zuul實現API網關和請求過濾

Spring Cloud入門教程-Zuul實現API網關和請求過濾

簡介

Zuul是Spring Cloud提供的api網關和過濾組件,它提供如下功能:

- 認證

- 過濾

- 壓力測試

- Canary測試

- 動態路由

- 服務遷移

- 負載均衡

- 安全

- 靜態請求處理

- 動態流量管理

在本教程中,我們將用zuul,把web端的請求/product轉發到對應的產品服務上,並且定義一個pre過濾器來驗證是否經過了zuul的轉發。


基礎環境

- JDK 1.8

- Maven 3.3.9

- IntelliJ 2018.1

- Git


創建Zuul服務

在IntelliJ中創建一個maven項目:

- cn.zxuqian

- apiGateway

然後在pom.xml中添加如下代碼:

需要注意的是,Spring官網的教程給的zuul的artifactId為spring-cloud-starter-zuul,這個是舊版zuul的名字,在我們的

Finchley.M9版本中已經更名為spring-cloud-starter-netflix-zuul。

添加src/main/resources/bootstrap.yml文件,指定spring.application.name:

spring:

application:

name: zuul-server

創建cn.zxuqian.Application類:

這裡使用了@EnableZuulProxy來指定使用zuul的反向代理,把我們的請求轉發到對應的伺服器上。然後啟用了eureka的服務發現。Zuul默認也會使用Ribbon做負載均衡,所以可以通過eureka發現已註冊的服務。PreFilter是一個預過濾器,用來在request請求被處理之前進行一些操作,它的代碼如下:

filterType - Zuul內置的filter類型有四種,pre, route,post,error,分別代表請求處理前,處理時,處理後和出錯後。 filterOrder - 指定了該過濾器執行的順序。 shouldFilter - 是否開啟此過濾器。 run - 過濾器的業務邏輯。這裡只是簡單的log了一下reqeust的請求方式和請求的路徑。

接下來,在我們的配置中心的git倉庫中創建zuul-server.yml文件,並添加如下配置:

server:

port: 8083

zuul:

routes:

products:

path: /product/**

serviceId: product-service

這裡配置了zuul的埠為8083,然後映射所有/product/的請求到我們的product-service服務上。如果不配置serviceId,那麼products這個Key就會默認作為ServiceId,而我們的例子中,ServiceId包括了-,所以在下邊顯示指定了ServiceId。配置完成後提交到git。


更新productService

productService的uri做了一點改動,使其更符合rest風格

這裡@RequestMapping匹配的路徑改為了/list,之前是/products。


更新web客戶端

在我們的web客戶端的ProductService中添加一個新的方法:

這次我們直接請求zuul-server服務,然後由它把我們的請求反射代理到product-service服務。最後在ProductController中添加一個請求處理方法:

用來處理/product/list請求,然後調用ProductService類中的方法。


測試

使用mvn spring-boot:run啟動configServer,registry, zuulServer, productService,web這幾個工程,然後啟動第二個productService,使用SERVER_PORT=8082 spring-boot:run。 訪問幾次http://localhost:8080/product/list,然後除了會在瀏覽器看到返回的結果,我們還會在zuulServer的命令行窗口中看到如下字樣:

GET 方式請求 http://xuqians-imac:8083/product/list

然後在兩個productService的命令行窗口中,我們還會看到隨機出現的

Access to /products endpoint

說明zuulServer也會自動進行負載均衡。大家有什麼想法歡迎來討論。


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

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


請您繼續閱讀更多來自 乾途技術分享 的精彩文章:

TAG:乾途技術分享 |