Spring Cloud 学习笔记 —— 服务网关 Gateway 的 Predicate
12.3 Gateway 的 Predicate
有4 种匹配规则
1. 通过时间匹配
- (1)配置 yml 文件
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- After=2020-10-01T01:01:01+08:00[Asia/Shanghai]
表示在- After=2020-10-01T01:01:01+08:00[Asia/Shanghai]
之后才会转发
今天是 2020-10-11日,配置的是转发 2020-10-01 之后的请求,所以应该能转发,转发的地址还是http://httpbin.org
-(2)重启服务,访问:http://localhost:8080/get
转发成功,这就是 predicates 时间匹配的After
用法
除了 After
还有 Before
、Between
Before
表示在某个时间点之前的请求转发Between
,表示在两个时间之间的请求转发,两个时间用英文的 “,” 隔开
2.请求方式匹配
可以指定只转发一种请求方法,请求方式 Method 有 Get 、Put 、POST、DELETE
- (1)配置 yml 文件
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- Method=GET
Method=GET 表示,只允许 GET 请求
- (2)继续访问 http://httpbin.org 地址测试,这次使用 POSTMAN 测试:
这就是请求方式匹配
3.请求路径匹配
- (1)配置 yml 文件
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: www.javaboy.org
predicates:
- Path=/2019/0612/{segment}
路径转发又回到开始的 HelloWorld 级别使用时的 Path 设置,{segment} 时一个占位符,表示满足 /2019/0612/ 这个规则的请求转发
- (2)www.javaboy.org 的可用地址有:
http://www.javaboy.org/2019/0612/git-install.html
http://www.javaboy.org/2019/0612/git-basic.html
用这两个地址测试:
因为可能是这样直接返回页面,有些请求报错,所以没显示出来,但是通过 F12 的 element 选项,可以看见响应结果,说明转发成功了,这就是通过路径匹配
4.通过请求参数匹配
- 1.通过只有请求参数匹配
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- Query=name
表示请求中必须有 name 参数才进行转发,否则不转发
一次没有 name 参数,一次有 那么参数的请求结果:
- 2.通过既有请求参数又有值匹配
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- Query=name,java.*
表示参数名必须有 name,参数值必须有以 java 开头的值才进行转发
一次有 java 开头值,一次没有 java 开头的参数值请求进行测试,测试地址是http://httpbin.org
5.多种匹配模式可以组合使用
- yml 文件单一路由组合
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- Query=name,java.*
- Method=GET
- After=2020-10-01T01:01:01+08:00[Asia/Shanghai]
这里的 - Query 、- Method 、- After 是 &&
的关系
- yml 文件多个路由组合
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- Query=name,java.*
- Method=GET
- After=2020-10-01T01:01:01+08:00[Asia/Shanghai]
- id: javaboy-route2
uri: www.javaboy.org
predicates:
- Query=name,java.*
- Method=GET
- After=2020-10-01T01:01:01+08:00[Asia/Shanghai]
这里的 javaboy-route 和 javaboy-route2 是**谁在前面,谁匹配的
**关系,因为 yml 文件是有序的;比如访问 http://localhost:8080/get?name=javaboy ,javaboy-route 和 javaboy-route2 是都能匹配,因位置的关系,javaboy-route 在 yml 文件中靠前,所以这个请求只被 javaboy-route 转发
推荐阅读
-
详解spring cloud构建微服务架构的网关(API GateWay)
-
Spring Cloud Gateway 服务网关快速实现解析
-
详解Spring Cloud Gateway基于服务发现的默认路由规则
-
记录spring-cloud-gateway获取post请求body参数,以及后端服务处理后的响应参数过程 gateway:2.2.0.RELEASE
-
Spring Cloud Gateway 服务网关快速实现解析
-
Spring Cloud gateway 网关服务 一
-
SpringCloud学习笔记二:Spring Cloud Eureka 服务治理
-
Beginning Spring学习笔记——第11章 使用Spring开发REST风格的Web服务
-
简单的spring cloud微服务架构学习用DEMO
-
微服务架构实战学习笔记 第五章 Spring Cloud Netflix Hystrix与服务容错