本文内容参考官方文档:Spring Cloud Gateway官方 -------如有问题,恳请指点!
Spring Cloud Gateway介绍:
网关作为流量的入口,常用的功能包括路由转发,权限校验,限流控制
,Spring Cloud Gateway作为Spring Cloud官方提出的第二代网关框架
,取代了zuul网关
。
基本工作流程(白话): 请求发送给网关→断言匹配(Predicate)→(符合→经过n个过滤器到达指定地方)|| (不符合)
基本工作流程(图-官方):
Spring Cloud Gateway 断言(Predicate)判断:
在此只做几个示例讲解,更多请去官方文档学习
1.The After Route Predicate Factory
该断言匹配在指定日期时间之后发生的请求
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
图解 例子
:
自己修改时间后的配置:
注意看 现在的时间是2020-07-09 15:34
配置的时间为2020-01-20 17:42
可以匹配成功~下面来访问试试
没有问题~
匹配不成功的示例再次就不多赘述了~
2.The Query Route Predicate Factory
param(参数)和可选的regexp
(正则表达式)断言判断(其是Java正则表达式)。以下示例配置查询路由谓词
#只匹配参数的案例
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://www.bilibili.com/
predicates:
- Query=uri
- id: qq_route
uri: https://www.qq.com/
predicates:
- Query=qq
运行代码后 我们发现只要值带有qq,或者uri
的就可以访问到对应的路由地址
好嘞,我们来测试第二种~
这里我们带上可选的regexp
(正则表达式)
#只匹配参数的案例
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://www.bilibili.com/
predicates:
- Query=uri, user.*
- id: qq_route
uri: https://www.qq.com/
predicates:
- Query=qq, admin.*
正则表达式:
.
匹配除换行符 \n 之外的任何单字符,*
匹配前面的子表达式零次或多次..*
匹配任何单字符零次或多次
我们来重启项目,再来一次示范:
3.The Weight Route Predicate Factory
该重量路线断言工厂有两个参数:group(分组)和weight(重量)
。
权重是按组计算的。以下示例配置权重路由谓词:
#只匹配参数的案例
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://www.bilibili.com/
predicates:
- Weight=group1, 5
- id: qq_route
uri: https://www.qq.com/
predicates:
- Weight=group1, 5
效果为:访问n
次,每个页面会被访问大概n/2
次