前言:
網關爲微服務提供了統一的入口,同時,將外部請求和服務隔離起來,保障後臺服務的安全性,進行權限校驗,拒絕不合法請求,將前端的請求動態的路由到服務集羣。
一、網關的作用
1、 權限控制和安全性--爲每個請求提供身份認證,並拒絕不滿足條件的請求。
2、預警和監控--跟蹤前端有意義的請求和統計數據,以便我們準確瞭解生產環境運行狀況。
3、動態路由--根據需求將請求動態地路由到不同的後端集羣。
4、 壓力測試--逐漸增大到集羣的流量,以便進行性能評估。
5、負載均衡--爲每種類型的請求分配容量並丟棄超過限額的請求。
6、靜態資源處理--直接在Zuul處理靜態資源並響應,而並非轉發這些請求到內部集羣中。
7、多區域彈性--實現跨AWS區域請求路由,擴大了ELB的使用範圍,並使前端服務更接近我們的成員。
二、配置路由
1、新建項目,並添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
2、添加配置文件,將zuul註冊到服務中心,zuul會自動尋找服務中的可用服務
server:
port: 9527
spring:
application:
#網關服務名稱
name: mircoservice-zuul-getway
#將客戶端註冊到服務中心
eureka:
client:
service-url:
defaultZone: http://eureka01.com:7001/eureka/,http://eureka02.com:7002/eureka/,http://eureka03.com:7003/eureka/
instance:
instance-id: getway-9527.com
prefer-ip-address: true
zuul:
#忽略的微服務,即請求這些微服務不通過網關
# ignored-services:
# - "*"
# - mircoservice-dept
routes:
#代理的微服務ID
mydept.serviceId: mircoservice-dept
#自定義路徑
mydept.path: /mydept/**
3、在啓動類上添加註解@EnableZuulProxy
4、分別啓動註冊中心和網關,這時候請求路徑變成
此外還可以配置統一的域名,配置負載均衡。
三、其他配置
zuul還提供了一系列過濾功能
@Component
public class MyFilter extends ZuulFilter {
public boolean shouldFilter() {
// 默認爲false,表示不開啓過濾器,需要改爲true
return false;
}
public Object run() {
// 過濾器邏輯
return null;
}
@Override
public String filterType() {
//過濾器類別
// Zuul提供4個級別的過濾器:
// pre:可以在請求被路由之前調用
// route:在路由請求時候被調用
// post:在route和error過濾器之後被調用
// error:處理請求時發生錯誤時被調用
return "pre";
}
@Override
public int filterOrder() {
// 執行順序爲1,值越小越先執行
return 1;
}
}