Spring Cloud Gateway示例 | DevGlan
這是討論了Spring cloud閘道器並使用它建立了一個演示應用程式。原始碼可以從github下載。
在這個實現中,我們將有2個不同的基於Spring Boot的微服務作為第一服務和第二服務。這些服務將自己註冊到發現伺服器。Spring雲閘道器將使用Netflix客戶端API發現服務並將請求路由到負載均衡的下游服務。
首先生成一個Spring Boot專案,選定的依賴項是Gateway,Hystrix和Actuator。我們還將在我們的pom中新增spring-cloud-starter-netflix-eureka-client依賴。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> |
Spring雲路由配置
Route是閘道器的基本構建塊。它由ID,目標URI,謂詞集合和過濾器集合定義。如果聚合謂詞為真,則匹配路由。
Spring Cloud Gateway提供了許多內建路由謂詞工廠,如路徑,主機,日期/時間,方法,標題等。我們可以使用這些內建路由與and()或or()結合來定義我們的路由。一旦請求到達閘道器,閘道器所做的第一件事就是根據定義的謂詞將請求與每個可用路由進行匹配,並將請求路由到匹配的路由。
以下是我們的路由配置。我們為2個微服務定義了2條不同的路由 - 第一服務和第二服務。
@Configuration public class BeanConfig { @Bean public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/api/v1/first/**") .filters(f -> f.rewritePath("/api/v1/first/(?.*)", "/${remains}") .addRequestHeader("X-first-Header", "first-service-header") .hystrix(c -> c.setName("hystrix") .setFallbackUri("forward:/fallback/first"))) .uri("lb://FIRST-SERVICE/") .id("first-service")) .route(r -> r.path("/api/v1/second/**") .filters(f -> f.rewritePath("/api/v1/second/(?.*)", "/${remains}") .hystrix(c -> c.setName("hystrix") .setFallbackUri("forward:/fallback/second"))) .uri("lb://SECOND-SERVICE/") .id("second-service")) .build(); } } |
在上面的配置中,第一個路由與一個路徑匹配,該路徑的謂詞定義為匹配URL /api/v1/queue/**所有請求,然後這些多個過濾器(如rewritePath addRequestHeader)將應用啟用,這些都是由開箱即用的閘道器提供的內建過濾器。
rewritePath過濾器採用路徑regexp引數和替換引數;AddRequestHeader GatewayFilter Factory接受名稱和值引數,並在請求中新增已配置的標頭引數;Hystrix GatewayFilter Factory需要單個名稱引數,該引數是HystrixCommand的名稱。請求將被轉發到與fallbackUri引數匹配的控制器。
下面是一個等效的application.yaml配置:
spring cloud: gateway: routes: - id: first-service uri: lb://FIRST-SERVICE predicates: - Path=/api/v1/first/** filters: - RewritePath=/api/v1/first/(?.*), /$\{remains} - AddRequestHeader=X-first-Header, first-service-header - name: Hystrix args: name: hystrix fallbackUri: forward:/fallback/first |
Spring Cloud Gateway應用程式配置
下面是我們的application.yaml檔案。
hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds:2000 spring: application: name:api-gateway server: port:8088 eureka: client: serviceUrl: defaultZone:http :// localhost :8761 / eureka register-with- eureka:false instance: preferIpAddress:true management: endpoints: web: exposure: include:hystrix.stream |
Hystrix fallback 命令
下面是我們的控制器實現,其端點將在我們的微服務失敗時被呼叫。
@RestController @RequestMapping(“/ fallback”) public class HystrixController { @GetMapping(“/ first”) public String firstServiceFallback(){ return“這是第一個服務的後備。”; } @GetMapping(“/ second”) public String secondServiceFallback(){ return“Second Server overloaded!請在一段時間後再試。”; } } |
相關文章
- Spring Cloud Gateway 深入SpringCloudGateway
- Spring cloud 之GatewaySpringCloudGateway
- spring cloud gateway 不生效SpringCloudGateway
- Spring Cloud Gateway 限流操作SpringCloudGateway
- Spring Cloud Gateway 入門SpringCloudGateway
- 快速突擊 Spring Cloud GatewaySpringCloudGateway
- Spring Cloud Gateway初體驗SpringCloudGateway
- Spring Cloud Gateway 入門案例SpringCloudGateway
- Spring Cloud Gateway入坑記SpringCloudGateway
- Spring Cloud Gateway使用簡介SpringCloudGateway
- spring cloud gateway之filter篇SpringCloudGatewayFilter
- spring cloud gateway 之限流篇SpringCloudGateway
- Spring Cloud Gateway限流實戰SpringCloudGateway
- Spring Cloud Gateway入門 - spring.ioSpringCloudGateway
- spring-cloud-gateway靜態路由SpringCloudGateway路由
- Spring Cloud Gateway WebFilter工廠 | BaeldungSpringCloudGatewayWebFilter
- Spring Cloud Gateway (一)入門篇SpringCloudGateway
- Spring Cloud Gateway---GlobalFilter(入門)SpringCloudGatewayFilter
- 阿里Sentinel支援Spring Cloud Gateway啦阿里SpringCloudGateway
- Spring Cloud Gateway之RouteLocator簡介SpringCloudGateway
- Spring Cloud Gateway 之 過濾器SpringCloudGateway過濾器
- Spring Cloud Gateway限制API速率 - tanzuSpringCloudGatewayAPI
- Spring Cloud Gateway之負載均衡SpringCloudGateway負載
- Spring Cloud Gateway應用篇(十三)SpringCloudGateway
- 聊聊spring cloud gateway的XForwardedHeadersFilterSpringCloudGatewayForwardHeaderFilter
- 手把手教你使用 Spring Cloud GatewaySpringCloudGateway
- spring Cloud Gateway 入門簡單使用SpringCloudGateway
- 微服務閘道器 Spring Cloud Gateway微服務SpringCloudGateway
- Spring Cloud Gateway + Nacos(1)簡單配置SpringCloudGateway
- Spring Cloud Gateway 閘道器嚐鮮SpringCloudGateway
- Spring Cloud Gateway 聚合swagger文件SpringCloudGatewaySwagger
- Spring Cloud Gateway 整合Eureka路由轉發SpringCloudGateway路由
- Spring Cloud Alibaba(四)--Gateway與SentinelSpringCloudGateway
- Spring Cloud Gateway實戰之一:初探SpringCloudGateway
- Spring Cloud Gateway 實現 gRpc 代理SpringCloudGatewayRPC
- Spring Cloud Gateway---自定義過濾器SpringCloudGateway過濾器
- Spring Cloud Gateway的斷路器(CircuitBreaker)功能SpringCloudGatewayUI
- Spring Cloud Gateway奪命連環10問?SpringCloudGateway