SpringCloud超詳細講解微服務網關Gateway
前言
上一篇:微服務網關Zuul
上文中,我們介紹瞭微服務網關Zuul,Zuul 是 Netflix 公司開源的產品,被稱為第一代網關,也是 Spring Cloud 前幾個版本默認使用的一款提供動態路由微服務網關組件,但是隨著 Netflix 公司一系列的停更事件,在最新的 Spring Cloud Greenwich 版本中已經不建議采用 Zuul 技術,官方建議使用 Spring Cloud Gateway 作為默認的網關技術。 Spring Cloud Gateway作為第二代網關技術,比Zull更強,官方會一直維護更新下去。
所以本文需要再介紹一下Gateway。
微服務網關GateWay介紹
Spring Cloud Gateway 是 Spring 體系內的一個全新項目,該項目是基於 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發,它旨在為微服務架構提供一種簡單有效的統一的 API 路由管理方式。
Spring Cloud Gateway 作為 Spring Cloud 生態系統中的網關,目標是替代 Netflix Zuul,其不僅提供統一的路由方式,並且基於 Filter 鏈的方式提供瞭網關基本的功能,例如:安全、監控/指標和限流。
GateWay特性介紹
- 基於 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
- 動態路由
- Predicates 和 Filters 作用於特定路由
- 集成 Hystrix 斷路器
- 集成 Spring Cloud DiscoveryClient
- 易於編寫的 Predicates 和 Filters
- 限流
- 路徑重寫
Gateway 中的相關術語
- Route(路由):這是網關的基本構建塊。它由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配。
- Predicate(斷言):這是一個 Java 8 的 Predicate。輸入類型是一個 ServerWebExchange。我們可以使用它來匹配來自 HTTP 請求的任何內容,例如 headers 或參數。
- Filter(過濾器):這是
org.springframework.cloud.gateway.filter.GatewayFilter
的實例,我們可以使用它修改請求和響應。
Gateway實戰
上文中,我們啟動瞭註冊中心registry,dms服務,和app服務,以及zuul服務,本文我們將創建gateway服務以替換zuul:
1、創建項目gateway
創建子模塊gateway ,pom.xml引入eureka-client 和gateway 的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2、創建啟動類
@EnableEurekaClient @SpringBootApplication public class GateWayApplication { public static void main(String[] args) { SpringApplication.run(GateWayApplication.class, args); } }
啟動類上增加@EnableEurekaClient以及@SpringBootApplication註解。
3、新增配置文件
新增配置文件application.yml
server:
port: 8004
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
routes:
– id: eureka-client-app-1
uri: lb://app
predicates:
– Path=/**
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
spring.cloud.gateway.routes路由參數配置說明:
- id:我們自定義的路由 ID。
- uri:需要轉發的目標服務地址。
- predicates:路由條件。
- filters:過濾規則,本示例暫時沒用。
4、編程方式實現路由
上面路由規則我們也可以使用編程方式來實現,在啟動類中增加如下代碼,是等效的:
@Configuration public class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { RouteLocatorBuilder.Builder routes = builder.routes(); routes.route("eureka-client-app-1",r -> r.path("/**") .uri("lb://app")) .build(); return routes.build(); } }
5、啟動驗證
訪問Gateway服務的地址:http://localhost:8004/app/index,效果如下:
總結
本文介紹瞭如何使用 Spring Cloud Gateway。Gateway 的特性以及兩種實現方式:一種是通過配置文件的方式來實現,一種是通過編碼的方式來實現,推薦使用配置文件的方式來使用,便於後期修改維護。
到此這篇關於SpringCloud超詳細講解微服務網關Gateway的文章就介紹到這瞭,更多相關SpringCloud Gateway內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringCloud Gateway的基本入門和註意點詳解
- 深入剖析網關gateway原理
- SpringCloud中Gateway的使用教程詳解
- SpringCloud超詳細講解微服務網關Zuul
- springcloud gateway無法路由問題的解決