Spring Boot Zuul代理伺服器和路由的簡單理解
Zuul Server是一個閘道器應用程式,可處理所有請求並執行微服務應用程式的動態路由。 Zuul伺服器也稱為邊緣伺服器。Zuul是 Netflix 開源的微服務閘道器,他可以和 Eureka , Ribbon , Hystrix 等元件配合使用。
在主應用程式新增 @EnableZuulProxy
註解.
Maven 使用者需要在pom.xml 檔案中新增以下依賴項 --
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency>
對於Zuul路由,請在application.properties 檔案中新增以下屬性。
spring.application.name = zuulserver
zuul.routes.products.path = /api/demo/**
zuul.routes.products.url = http://localhost:8080/
server.port = 8111
或application.yml 檔案中
server: port: 8111 spring: application: name: zuulserver zuul: routes: products: path: /api/demo/** url: http://localhost:8080/
注 - 在通過Zuul Proxy進行路由之前,http://localhost:8080/
應用程式應該已經執行。 這個配置表示已/api/demo/開頭的URL請求將被轉發到peoducets上。
Zuul元件的核心是一系列的過濾器,這些過濾器可以完成以下功能:
-
安全和認證
-
動態路由
-
壓力測試
-
負載均衡
-
靜態響應處理
Filter工作流程:
首先看到Filter的四個方法,FilterType,filterOrder,shouldFilter,run。
filterType
String filterType();
-
PRE -- 在Request routing到源web-service之前執行。用來實現Authentication、選擇源服務地址等
-
ROUTING -- 路由請求時被呼叫,請求路由到位伺服器
-
POST -- ROUTING返回Response後執行。用來實現對Response結果進行修改,收集統計資料以及把Response傳輸會客戶端。
-
ERROR -- 發生錯誤時即呼叫
下面是其執行順序 --
filterOrder --
int filterOrder();
-
通過int值來定義過濾器的執行順序,數值越小優先順序越高。
shouldFilter --
boolean shouldFilter();
-
返回一個boolean值來判斷該過濾器是否要執行。我們可以通過此方法來指定過濾器的有效範圍。
run --
Object run();
-
過濾器的處理邏輯,許可權控制,安全,日誌等就是在這個地方.