Spring Cloud Gateway实战之四:内置predicate小结
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概览
- 本文是《Spring Cloud Gateway实战》系列的第四篇,咱们将已有的断言(predicate)的类型做个小结,今天的内容中,除了官方推荐的简化版配置,还给出了动态路由时该断言的JSON格式配置;
After
After表示路由在指定时间之后才生效
配置文件,注意时间字符串的格式,+08:00表示东八区:
spring:
cloud:
gateway:
routes:
- id: after_route
uri: http://127.0.0.1:8082
predicates:
- After=2021-08-16T07:36:00.000+08:00[Asia/Shanghai]
- 动态路由的JSON格式,注意args参数要用datetime:
[
{
"id": "after_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "After",
"args": {
"datetime": "2021-08-16T07:36:00.000+08:00[Asia/Shanghai]"
}
}
]
}
]
Before
Before表示路由在指定时间之前才生效
配置文件:
spring:
cloud:
gateway:
routes:
- id: before_route
uri: http://127.0.0.1:8082
predicates:
- Before=2021-08-16T07:36:00.000+08:00[Asia/Shanghai]
- 动态路由的JSON格式,注意args参数要用datetime:
[
{
"id": "before_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Before",
"args": {
"datetime": "2021-08-16T07:36:00.000+08:00[Asia/Shanghai]"
}
}
]
}
]
Between
Between表示路由在指定时间段之内才生效,既然是时间段就是两个参数,注意它们的写法
配置文件:
spring:
application:
name: hello-gateway
cloud:
gateway:
routes:
- id: between_route
uri: http://127.0.0.1:8082
predicates:
- Between=2021-08-16T07:36:00.000+08:00[Asia/Shanghai], 2021-08-16T08:15:00.000+08:00[Asia/Shanghai]
- 动态路由的JSON格式,注意args参数,起始时间是datetime1,结束时间是datetime2:
[
{
"id": "path_route_addr",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Between",
"args": {
"datetime1": "2021-08-16T07:36:00.000+08:00[Asia/Shanghai]",
"datetime2": "2021-08-16T08:18:00.000+08:00[Asia/Shanghai]"
}
}
]
}
]
Cookie
Cookie表示cookie存在指定名称,并且对应的值符合指定正则表达式,才算匹配成功
配置文件:
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: https://example.org
predicates:
- Cookie=chocolate, ch.p
- 动态路由的JSON格式,注意args参数:
[
{
"id": "cookie_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Cookie",
"args": {
"name": "chocolate",
"regexp": "ch.p"
}
}
]
}
]
Header
Header表示header存在指定名称,并且对应的值符合指定正则表达式,才算匹配成功
下面的例子要求header中必须存在X-Request-Id,并且值一定要是数字
配置文件:
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Header=X-Request-Id, \d+
- 动态路由的JSON格式,注意args参数是header和regexp,还要注意的是regexp的值里面有两个反斜杠(转义问题):
[
{
"id": "header_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Header",
"args": {
"header": "X-Request-Id",
"regexp": "\\d+"
}
}
]
}
]
- 用postman测试的参数填写和结果如下:
Host
Host表示请求的host要和指定的字符串匹配,并且对应的值符合指定正则表达式,才算匹配成功,可以同时指定多个host匹配表达式,下面的例子给了两个,其中第一个指定了端口:
配置文件:
spring:
cloud:
gateway:
routes:
- id: host_route
uri: http://127.0.0.1:8082
predicates:
- Host=test.com:8081,**.anotherhost.org
- 动态路由的JSON格式,注意args参数,另外通过实测发现,这里regex的值是个正则表达式,因此上面配置文件中的多个host,在此处要通过正则表达式的写法实现(json数组的写法,在反序列化的时候总是出现异常,无法解析成功):
[
{
"id": "header_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Host",
"args": {
"regex": "test.com:8086"
}
}
]
}
]
Method
Method非常好理解,匹配指定的方法类型(可以有多个)
配置文件:
spring:
cloud:
gateway:
routes:
- id: method_route
uri: http://127.0.0.1:8082
predicates:
- Method=GET,POST
- 动态路由的JSON格式,同样,由于个人水平问题,暂时只实践出指定单个方法的JSON写法,如果你知道如何指定过个方法,还望告知,谢谢:
[
{
"id": "method_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Method",
"args": {
"methods": "GET"
}
}
]
}
]
Path
Path很常用,匹配指定的方法类型(可以有多个)
配置文件,注意{segment},表示该位置的真实值可以被提取出来,在filter中可以使用,这在后续的filter文章中会有说明:
spring:
cloud:
gateway:
routes:
- id: path_route
uri: http://127.0.0.1:8082
predicates:
- Path=/hello/{segment},/lbtest/{segment}
- 动态路由的JSON格式,同样,由于个人水平问题,暂时只实践出指定单个方法的JSON写法,如果你知道如何指定过个方法,还望告知,谢谢:
[
{
"id": "path_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Path",
"args": {
"pattern": "/hello/{segment}"
}
}
]
}
]
Query
Query匹配的是请求中是否带有指定的参数,也能要求该参数等于指定的值(正则表达式)才被匹配上
配置文件,只要带有名为name的请求参数就被匹配:
spring:
cloud:
gateway:
routes:
- id: query_route
uri: http://127.0.0.1:8082
predicates:
- Query=name
- 如下所示,还可以指定name参数的值必须aaa.,这个小数点表示匹配一个字符,例如name=aaa1或者name=aaa2都可以:
spring:
cloud:
gateway:
routes:
- id: query_route
uri: http://127.0.0.1:8082
predicates:
- Query=name,aaa.
- 动态路由的JSON格式,注意参数名和参数值分别用param和regexp来设置:
[
{
"id": "query_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "Query",
"args": {
"param": "name",
"regexp": "aaa."
}
}
]
}
]
- 测试如下:
RemoteAddr
RemoteAddr很好理解,匹配的指定来源的请求
配置文件:
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: http://127.0.0.1:8082
predicates:
- RemoteAddr=192.168.50.134/24
- 动态路由的JSON格式,注意参数名和参数值分别用param和regexp来设置:
[
{
"id": "remoteaddr_route",
"uri": "http://127.0.0.1:8082",
"predicates":[
{
"name": "RemoteAddr",
"args": {
"sources": "192.168.50.134/24"
}
}
]
}
]
- 测试如下,注意测试的时候主机地址不要用localhost和127.0.0.1,这样会导致服务端判断来源的时候取得的网卡地址为0.0.0.0:
Weight
Weight顾名思义,按照权重将请求分发到不同位置
配置文件:
spring:
cloud:
gateway:
routes:
- id: weight_high
uri: http://192.168.50.134:8082
predicates:
- Weight=group1, 8
- id: weight_low
uri: http://192.168.50.135:8082
predicates:
- Weight=group1, 2
- 以上就是常用的断言类型了,可见功能已经很强大了,希望能给您一些参考
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
Spring Cloud Gateway实战之四:内置predicate小结的更多相关文章
- Spring Cloud Gateway实战之五:内置filter
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Spring Cloud Gateway实战之三:动态路由
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Spring Cloud Gateway实战之一:初探
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<Spring Cloud Gateway实 ...
- Spring Cloud Gateway实战之二:更多路由配置方式
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 看完就会的Spring Cloud Gateway
在前面几节,我给大家介绍了当一个系统拆分成微服务后,会产生的问题与解决方案:服务如何发现与管理(Nacos注册中心实战),服务与服务如何通信(Ribbon, Feign实战) 今天我们就来聊一聊另一个 ...
- spring cloud gateway之filter篇
转载请标明出处: https://www.fangzhipeng.com 本文出自方志朋的博客 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理,在路由 ...
- 微服务网关 Spring Cloud Gateway
1. 为什么是Spring Cloud Gateway 一句话,Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用的还是Zuul 1.x版本,而这个版本是 ...
- Spring Cloud gateway 网关服务二 断言、过滤器
微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...
- Spring Cloud Gateway入坑记
Spring Cloud Gateway入坑记 前提 最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理.之前,很多网关应用使用的是Spring-Clou ...
随机推荐
- 洛谷P6075题解
题面 首先这 \(n\) 个数是互相独立的,所以我们不需要统一的去考虑,只需要考虑其中一个数即可. 我们以 \(k=5\) 的情况举例. 我设 \(f_i\) 为最后一行只填前 \(i\) 个点的情况 ...
- openlayer 4326与3857坐标互转之Java版
public class Transform { private static final double PI = Math.PI; private static final double merca ...
- 学习使用Wpf开源的文本编辑器—smithhtmleditor
前言 本文主要介绍使用Wpf文本编辑器--smithhtmleditor. 编辑器使用 首先新建一个项目WpfEditor. 然后到Codeplex下载smithhtmleditor. 下载地址:ht ...
- MySQL初步学习——2021.09.27每日总结,第四周周一
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了SQL语句的分类: SQL语句很多,分为 1.DQL:数据查询语言(凡是带有select关键字的都是查询语句) 2 ...
- 洛谷3571 POI2014 SUP-Supercomputer (斜率优化)
一道神仙好题. 首先看到有多组\(k\),第一反应就是离线. 考虑贪心. 我们每次一定是尽量选择有儿子的节点.以便于我们下一次扩展. 但是对于一个\(k\),每次贪心的复杂度是\(O(n)\) 总复杂 ...
- 洛谷3628 APIO2010特别行动队(斜率优化)
考虑最普通的\(dp\) \[dp[i]=max(dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c \] qwq 由于演算纸扔掉了 qwq 所以直接给出最后的 ...
- el-scrollbar滚动条置底
<el-scrollbar ref="leftScrollbar" style="height: 600px"></el-scrollbar& ...
- 【原创】浅谈指针(五)const和指针
前言 过了几个月再次更新.最近时间也不多了,快要期中考试了,暂且先少写一点吧. 本文仅在博客园发布,如在其他平台发现均为盗取,请自觉支持正版. 练习题 我们先来看几道题目.如果这几道题都不会的话,就先 ...
- OO_JAVA_JML系列第三次作业__架构之谈
OO_JAVA_JML系列第三次作业 ## ----架构之谈 目录 OO_JAVA_JML系列第三次作业 出发点 操作的可分离性 操作本身的多样性 实现手段:表驱动编程 储存 注册 出发点 操作的可分 ...
- 手把手教你学Dapr - 2. 必须知道的概念
Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...