一、Gateway 網關簡介
- spring cloud Gateway 是spring 基於spring 5.0 spring boot 2.0、Project Reactor等技術開發
- spring cloud Gateway 基於filter鏈提供網關基本功能:安全、監控/埋點、限流等
- spring cloud Gateway 為微服務架構提供簡單、有效的統一api路由器管理方式。
- spring cloud GateWay 代替 Netflix Zuul 的解決方案。 Netflix Zuul 目前處於維護狀態,無新功能的開發
核心:過濾和路由
Gateway組件核心是一系列的過濾器,通過這些過濾器將客戶端的請求轉發到對應的微服務中,是加在整個微服務最前沿的防火牆和代理器,隱藏微服務ip信息,從而加強安全保護。Gateway本身就是一個微服務,需要注冊到Eureka中。
添加網關Gateway微服務架構圖:

不管使來自客戶端的請求,還是服務內部調用都可通過網關,然后在通過網關實現鑒權、動態路由等操作。網關就是統一入口。
核心概念:
- 路由(route) :路由信息組成。由一個Id、一個目的URL、一組斷言工廠、一組filter組成。如果路由器斷言為真。說明請求Url和配置路由匹配。
- 斷言(predicate):Gateway中的斷言函數輸入類型是spring 5.0 框架中的 serverWebExchange。Gateway中的斷言函數允許開發者自定義匹配來自 http request 中的任何信息。參數和請求頭。
- 過濾器(filter): 一個標准的spring WebFilter.Gateway中的filter 分為2種類型。分別是 Gateway Filter 、Global Filter。過濾器會將請求和響應進行修改處理。
二、簡單入門
1、所需依賴pom.xml 需要注冊到eureke 注冊中心所以添加Eureka client 依賴
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-gateway</artifactId> 4 </dependency> 5 6 <dependency> 7 <groupId>org.springframework.cloud</groupId> 8 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 9 </dependency>
2、啟動添加注解 @EnableDiscoveryClient
3、配置文件application.yml 添加路由配置 、將請求到網關服務地址中包含 /provider/ 的請求路由轉發的 192.168.188.10:9091 服務上
1 spring: 2 cloud: 3 gateway: 4 routes: 5 # 路由Id 6 - id: springcloud-eureka-provider-routes 7 #代理服務器地址 8 uri: http://192.168.188.10:9091 9 #斷言規則 10 predicates: 11 - Path=/provider/**
路由地址寫死不合理,可spring cloud Gateway 中通過配置動態路由。詳情見:面向服務路由
三、面向服務路由 將ip地址 使用lb://服務名代替 Gateway根據服務名通過ribbon算法獲取服務地址 ,lb:后的服務名必須在Eureka中注冊才能使用
1 spring: 2 cloud: 3 gateway: 4 routes: 5 # 路由Id 6 - id: springcloud-eureka-provider-routes 7 #代理服務器地址 8 uri: lb://springcloud-eureka-provider 9 #斷言規則 10 predicates: 11 - Path=/provider/**
log 分析

四、 路由前綴處理
1、前綴的添加與去除

客戶端請求地址與微服務請求地址不一致時,可通過配置路徑過濾器實現路徑前綴的添加個去除
添加前綴配置:關鍵字:PrefixPath
1 spring: 2 cloud: 3 gateway: 4 routes: 5 # 路由Id 6 - id: springcloud-eureka-provider-routes 7 #代理服務器地址 8 uri: lb://springcloud-eureka-provider 9 #斷言規則 10 predicates: 11 - Path=/** 12 filters: 13 - PrefixPath=/provider
去除前綴配置: 關鍵:StripPrefix
spring:
cloud:
gateway:
routes:
# 路由Id
- id: springcloud-eureka-provider-routes
#代理服務器地址
uri: lb://springcloud-eureka-provider
#斷言規則
predicates:
#- Path=/**
- Path=/api/provider/**
filters:
#配置去除前綴 1:標識1個路徑 2:標識2個路徑 以此類推
- StripPrefix=1
