Spring Cloud GateWay 路由转发规则介绍
在我们开始本章内容之前我们要来先了解下Spring Cloud Gateway
内部提供的所有谓语、断言
,这样我们才能目标性的进行学习,我截了一张官网的图,如下所示:
每一个Predicate
的使用,你可以理解为:当满足这种条件后才会被转发
,如果是多个,那就是都满足的情况下被转发。
我们在application.yml
配置文件内添加对应的路由配置,如下所示:
server:
port: 9521
spring:
application:
name: service-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 5fc9fa35-871d-499a-91f0-dd0ceacbd978
gateway:
routes:
- id: nacos-consumer
uri: lb://nacos-consumer
predicates:
- Path=/consumer/**
先来解释下route
的组成部分:
-
id
:路由的ID , 可以随意填写,但是不要重复 -
uri
:匹配路由的转发地址 , lb代表使用注册中心的服务名称作为路由 -
predicates
:配置该路由的断言,通过PredicateDefinition
类进行接收配置,predicate为true才会进行路由
当访问http://localhost:9521/consumer 后就会被路由到nacos-consumer服务之上
predicate断言的参数
Before 方式匹配转发
当部署有访问时间限制的接口时,我们可以通过Before Predicate
来完成某一个时间点之前允许访问,过时后则不允许转发请求到具体的服务,配置如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri: xxxx
predicates:
- Before=2019-05-01T00:00:00+08:00[Asia/Shanghai]
After 方式匹配转发
After Predicate
与Before
配置使用一致,匹配某一个时间点之后允许路由转发,如下所示配置:
spring:
cloud:
gateway:
routes:
- id: blog
uri: xxxx
predicates:
- After=2019-04-29T00:00:00+08:00[Asia/Shanghai]
在上面配置中允许2019-04-29
凌晨之后进行转发到xxxxx
。
Between 方式匹配转发
那如果是一个时间段内允许请求转发,通过Before
、After
组合配置也可以完成,不过Spring Cloud Gateway
还是提供了Between
方式,如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri: xxxx
predicates:
- Between=2019-04-29T00:00:00+08:00[Asia/Shanghai], 2019-05-01T00:00:00+08:00[Asia/Shanghai]
在上面配置中,允许在2019-04-29
日凌晨后 & 2019-05-01
凌晨之前请求转发到xxxxx
。
Cookie 方式匹配转发
Spring Cloud Gateway
还提供了根据Cookie
值的方式匹配转发请求,如果请求中所携带的Cookie
值与配置的Predicate
匹配,那么就可以被允许转发到指定地址,如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri:xxxx
predicates:
- Cookie=name, zhansgan
在上面配置中,如果客户端发送请求时携带了"hengboy=yuqiyu"
的Cookie信息,则允许请求转发。
Header 方式匹配转发
Spring Cloud Gateway
可以根据发送请求的Header
信息进行匹配转发,加入我们可以根据X-Request-Id
的值进行匹配,如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri: xxxx
predicates:
- Header=X-Request-Id, \d+
如果头信息为X-Request-Id:abc
时,就会转发失败,出现404。
Host 方式匹配转发
Spring Cloud Gateway
可以根据Host
主机名进行匹配转发,如果我们的接口只允许**.yuqiyu.com
域名进行访问,那么配置如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri: xxxxx
predicates:
- Host=**.zhansgan.com
推荐阅读
-
详解Spring Cloud Gateway基于服务发现的默认路由规则
-
基于Nacos实现Spring Cloud Gateway实现动态路由的方法
-
Nacos+Spring Cloud Gateway动态路由配置
-
Spring Cloud GateWay 路由转发规则介绍
-
spring cloud gateway介绍及predicated使用
-
spring cloud gateway 入门介绍
-
spring cloud gateway websocket 路由底层实现
-
spring cloud gateway网关路由分配代码实例解析
-
spring-cloud-gateway动态路由的实现方法
-
Spring Cloud Gateway 源码解析(2) —— 路由