getaway⽹关转发去前缀_SpringCloudgateway⽹关服务⼆断
⾔、过滤器
微服务当前这么⽕爆的程度,如果不能学会⼀种微服务框架技术。怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习。说没有时间?没有精⼒?要学俩个框架?⽽Spring Cloud alibaba只需要你学会⼀个就会拥有俩种微服务治理框架技术。何乐⽽不为呢?加油吧!骚猿年
上⼀篇我们讲述了gateway 的路由功能其实也类似与zuul服务的路由转发。今天主要讲⼀下断⾔机制。
内置的断⾔⼯⼚
介绍 Spring Cloud Gateway将路由作为Spring WebFlux HandlerMapping基础架构的⼀部分进⾏匹配。Spring Cloud Gateway包括许多内置的Route Predicate⼯⼚。所有这些断⾔都与HTTP请求的不同属性匹配。多个Route Predicate⼯⼚可以合并,也可以通过逻辑合并
可以看到gateway 提供如此之多丰富的断⾔,⽅式。
⽐如说时间控住的,我们能想到秒杀场景。
ip 的我们能想到⾦丝雀测试
权重我们可以使⽤灰度等等场景的应⽤
具体使⽤还得参照业务场景来选择更适合我们的业务场景。
gateway 过滤器分为全局过滤器,个性化过滤器
gateway 已经给我们提供了⾮常丰富的过滤器
AddRequestHeader GatewayFilter⼯⼚采⽤名称和值参数。
这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求的标头中。
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri:
filters:
- AddRequestHeader=X-Request-Foo, Bar
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri:
predicates:
- Path=/foo/{gment}
filters:
-
AddRequestHeader=X-Request-Foo, Bar-{gment}
-AddResponHeader GatewayFilter⼯⼚采⽤名称和值参数。
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri:
filters:
- AddRequestParameter=foo, bar
这将添加foo=bar到所有匹配请求的下游请求的查询字符串中。
AddRequestParameter知道⽤于匹配路径或主机的URI变量。URI变量可⽤于该值,并将在运⾏时扩展。
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri:
predicates:
- Host: {gment}.
filters:
- AddRequestParameter=foo, bar-{gment}
AddResponHeader GatewayFilter⼯⼚采⽤名称和值参数。
spring:
cloud:
gateway:
routes:
- id: add_respon_header_route
uri:
filters:
- AddResponHeader=X-Respon-Foo, Bar
这会将X-Respon-Foo:Bar标头添加到所有匹配请求的下游响应的标头中。
spring:
cloud:
gateway:
routes:
- id: add_respon_header_route
uri:
predicates:
- Host: {gment}.
filters:
- AddResponHeader=foo, bar-{gment}
DedupeResponHeader GatewayFilter⼯⼚采⽤⼀个name参数和⼀个可选strategy参数。name可以包含标题名称列表,以空格分隔。
spring:
cloud:
gateway:
routes:
id: dedupe respon header_route
uri:
filters:
DedupeResponHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin 如果⽹关CORS逻辑和下游逻辑都添加了重复的值Access-Control-Allow-Credentials和Access-Control-Allow-Origin响应标头,则这将删除它们。
DedupeResponHeader过滤器还接受可选strategy参数。可接受的值为RETAIN_FIRST(默认值)RETAIN_LAST,和RETAIN_UNIQUE
Hystrix是Netflix的⼀个库,⽤于实现断路器模式。Hystrix GatewayFilter允许您将断路器引⼊⽹关路由,保护您的服务免受级联故障的影响,并允许您在下游故障的情况下提供后备响应
要在项⽬中启⽤Hystrix GatewayFilters,请spring-cloud-starter-netflix-hystrix从Spring Cloud Netflix添加依赖项。
Hystrix GatewayFilter⼯⼚需要⼀个name参数,它是的名称HystrixCommand。
spring:
cloud:
gateway:
routes:
- id: hystrix_route
uri:
filters:
- Hystrix=myCommandName
这会将其余的过滤器包装在HystrixCommand带有命令名的中myCommandName。
Hystrix过滤器还可以接受可选fallbackUri参数。当前,仅forward:⽀持计划的URI。如果调⽤了后备,则请求将被转发到与URI相匹配的控制器。
spring:
cloud:
gateway:
routes:
- id: hystrix_route
uri: lb://backing-rvice:8088
predicates:
- Path=/consumingrviceendpoint
filters:
- name: Hystrix
args:
name: fallbackcmd
fallbackUri: forward:/incaoffailureuthis
- RewritePath=/consumingrviceendpoint, /backingrviceendpoint
/incaoffailureuthis调⽤Hystrix后备时,它将转发到URI。请注意,此⽰例还通过lb⽬标URI 上的前缀演⽰了(可选)Spring Cloud Netflix Ribbon负载平衡。
主要⽅案是对fallbackUri⽹关应⽤程序中的内部控制器或处理程序使⽤。但是,也可以将请求重新路由到外部应⽤程序中的控制器或处理程序,如下所⽰:
spring:
cloud:
gateway:
routes:
- id: ingredients
uri: lb://ingredients
predicates:
- Path=//ingredients/**
filters:
- name: Hystrix
args:
name: fetchIngredients
fallbackUri: forward:/fallback
- id: ingredients-fallback
uri: localhost:9994
predicates:
- Path=/fallback
在此⽰例中,fallback⽹关应⽤程序中没有终结点或处理程序,但是另⼀个应⽤程序中有⼀个终结点或处理程序,在下注册
localhost:9994。
如果将请求转发给后备,则Hystrix⽹关过滤器还会提供Throwable引起请求的。它已ServerWebExchange作为ServerWebExchangeUtils.HYSTRIX EXECUTION EXCEPTION_ATTR属性添加到,可以在⽹关应⽤程序中处理后备时使⽤。
对于外部控制器/处理程序⽅案,可以添加带有异常详细信息的标头。您可以在FallbackHeaders GatewayFilter Factory部分中找到有关它的更多信息。
Hystrix设置(例如超时)可以使⽤全局默认值配置,也可以使⽤Hystrix Wiki上说明的应⽤程序属性在逐条路由的基础上进⾏配置。
要为上述⽰例路由设置5秒超时,将使⽤以下配置:
该FallbackHeaders⼯⼚可以让你在转发到请求的头部添加猬执⾏异常的详细信息fallbackUri在以下情况下在外部应⽤程序
spring:
cloud:
gateway:
routes:
id: ingredients
uri: lb://ingredients
predicates:
Path=//ingredients/**
filters:
name: Hystrix
args:
name: fetchIngredients
fallbackUri: forward:/fallback
id: ingredients-fallback
uri: localhost:9994
predicates:
Path=/fallback
filters:
name: FallbackHeaders
args:
executionExceptionTypeHeaderName: Test-Header
在此⽰例中,在运⾏时发⽣执⾏异常后HystrixCommand,该请求将转发到在上fallback运⾏的应⽤中的端点或处理程序localhost:9994。具有异常类型,消息和-if avai 通过设置下⾯列出的参数的值及其默认值,可以在配置中覆盖标头的名称:
- executionExceptionTypeHeaderName("Execution-Exception-Type")
- executionExceptionMessageHeaderName("Execution-Exception-Message")
- rootCauExceptionTypeHeaderName("Root-Cau-Exception-Type")
- rootCauExceptionMessageHeaderName("Root-Cau-Exception-Message")
您可以在Hystrix GatewayFilter Factory部分中找到有关Hystrix如何与Gateway⼀起⼯作的更多信息。
MapRequestHeader GatewayFilter⼯⼚采⽤'fromHeader'和'toHeader'参数。它创建⼀个新的命名标头(toHeader),并从传⼊的HTTP请求中从现有的命名标头(fromHeader)中提取值。如果输⼊标头不存在,则过滤器不起作⽤。如果新的命名标头已经存
在,则其值将使⽤新值进⾏扩充。