spring cloud gateway 路由过滤器修改传入的HTTP请求或传出的HTTP响应
spring cloud gateway通过不同的过滤器集成其他spring cloud组件
过滤器的种类
StripPrefix 过滤器
spring:
cloud:
gateway:
routes:
# 集成eureka注册中心的配置示例
- id: hello_ribbon_route
uri: lb://spring-cloud-producer
predicates:
- Path=/producerInEureka/**
filters:
- StripPrefix=1
http://host:port/producerInEureka/hello
时
StripPrefix
过滤器时,gateway 发送请求到后台服务spring-cloud-producer
的url就是http://spring-cloud-producer/producerInEureka/hello
StripPrefix
过滤器时,gateway会根据StripPrefix=1
所配的值(这里是1)去掉URL路径中的部分前缀(这里去掉一个前缀,即去掉producerInEureka
)
spring-cloud-producer
的url变成http://spring-cloud-producer/hello
PrefixPath 过滤器
StripPrefix
正相反,是在URL路径前面添加一部分的前缀spring:
cloud:
gateway:
routes:
- id: prefixpath_route
uri: http://example.org
filters:
- PrefixPath=/mypath
/mypath
添加到路由prefixpath_route
匹配到的所有请求的路径的前面。
/hello
的请求将会被发送到/mypath/hello
。Hystrix 过滤器
作用:Hystrix 过滤器允许您将断路器引入网关路由,保护您的服务免受级联故障的影响,并允许您在下游故障时提供回退响应。
配置示例
spring:
cloud:
gateway:
routes:
- id: hystrix_route
uri: http://example.org
filters:
- Hystrix=myCommandName
myCommandName
作为名称生成HystrixCommand对象来进行熔断管理。spring:
cloud:
gateway:
routes:
- id: hystrix_route
uri: lb://backing-service:8088
predicates:
- Path=/consumingserviceendpoint
filters:
- name: Hystrix
args:
name: fallbackcmd
fallbackUri: forward:/incaseoffailureusethis
- RewritePath=/consumingserviceendpoint, /backingserviceendpoint
fallbackUri: forward:/incaseoffailureusethis
配置了fallback
时要会调的路径
/incaseoffailureuset
这个URI。其他过滤器请看官方文档:
LoadBalancerClient负载均衡过滤器(整合eureka注册中心)
spring:
cloud:
gateway:
routes:
# 集成eureka注册中心的配置示例
- id: hello_ribbon_route
uri: lb://spring-cloud-producer
predicates:
- Path=/producerInEureka/**
filters:
- StripPrefix=1
uri
所用的协议为lb
时(以uri: lb://spring-cloud-producer
为例),gateway将使用 LoadBalancerClient把spring-cloud-producer
通过eureka解析为实际的主机和端口,并进行负载均衡。Netty Routing Filter
uri
所用的协议为http
或者https
时,netty 路由过滤器就会启用HttpClient
转发请求给网关后面的服务。Websocket Routing Filter
Spring Web Socket
的基础架构去转发Websocket
请求spring:
cloud:
gateway:
routes:
# 一般的 Websocket 路由
- id: websocket_route
uri: ws://localhost:3001
predicates:
- Path=/websocket/**
# SockJS 路由
- id: websocket_sockjs_route
uri: http://localhost:3001
predicates:
- Path=/websocket/info/**
uri
所用的协议为ws
或者wss
时,Websocket 路由过滤器就会启用lb:ws://serviceid
,以在使用websocket路由过滤器的时候同时使用负载均衡过滤器官方参考: