Gateway 内置路由断言|学习笔记

简介: 快速学习 Gateway 内置路由断言

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段Gateway 内置路由断言】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/685/detail/11890


Gateway 内置路由断言


内容介绍:

一、断言

二、内置路由断言工厂

三、内置路由断言工厂的使用


一、断言

Predicate(断言)用于进行条件判断,只有断言都返回真,才会真正的执行路由。

也有人将断言成为谓词,那么断言真正的含义是?

断言就是说:在什么条件下,才能进行路由转发

断言分为两部分:一是内置路由断言,二是自定义路由断言

内置路由断言:

1.内置路由断言工厂

SpringCloud Gateway 包括许多内置的断言工厂,所有这些断言都与 HTTP 请求的不同属性匹配。具体如下:

(1)基于于Datetime类型的断言工厂

此类型的断言根据时间做判断,主要有三个:

AfterRoutePredicateFactory:接收一个日期参数,判断请求日期是否晚于指定日期

BeforeRoutePredicateFactory:接收一个日期参数,判断请求日期是否早于指定日期

BetweenRoutePredicateFactory:接收两个日期参数,判断请求日期是否在指定时间段内

-After=2019-12-31T23:59:59.789+08:0O[Asia/Shanghai]

(2)基于远程地址的断言工厂

RemoteAddrRoutePredicateFactory:接收一个IP地址段,判断请求主机地址是否在地址段中

-RemoteAddr=92.168.1.1/24

(3)基于 Cookie 的断言工厂

CookieRoutePredicateFactory: 接收两个参数,cookie 名字和一个正则表达式。判断请求 cookie 是否具有给定名称且值与正则表达式匹配。

-(ookie=chocolate, ch.

(4)基于 Header 的断言工厂

HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。判断请求Header 是否具有给定名称且值与正则表达式匹配。

-Header=X-Request-ld,ld+

(5)基于 Host 的断言工厂

HostRoutePredicateFactory:接收一个参数,主机名模式。判断请求的 Host 是否满足匹配规则。

-Host=**.testhost.org

(6)基于 Method 请求方法的断言工厂

MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。

-Method=GET

(7)基于 Path 请求路径的断言工厂

PathRoutePredicateFactory:接收一个参数,判断请求的URI部分是否满足路径规则。

-Path=/fool{segment}

(8)基于 Query 请求参数的断言工厂

QueryRoutePredicateFactory :接收两个参数,请求 param 和正则表达式,判断请求参数是否具有给定名称且值与正则表达式匹配。

-Query=baz, ba.

(9)基于路由权重的断言工厂

WeightRoutePredicateFactory:接收一个[组名,权重],然后对于同一个组内的路由按照权重转发

routes:

-id: weight_route1

uri: host1

predicates:

-Path=/product/**

-Weight=group3,1

-id: weight_route2

Uri:host2

Predicates:

-Path=/product/**

-Weight=group3,9

2.内置路由断言工厂的使用

我们用个例子来演示:

复制 before 一列=2019-11-28T00:00:00.000+08:00

predicates: # 断言(条件判断,返回值是boolean转发请求要满足的条件)

- Path=/product-serv/** #当请求路径满足Path指定的规则时,此路由信息才会正常转发

- Before=2020-11-28T00:00:00.000+08: 00

filters:#过滤器(在请求传递过程中对请求做一些手脚)

- StripPrefix=1 #在请求转发之前去掉—层路径

访问 product-serv,

输入 localhost:7000/product-srev/product/1,

结果如下图

image.png

访问无问题

将数据改为2010,访问之后页面报错

image.png

说明只有当请求满足路径满足 Path 指定的规则时,此路由信息才会正常转发

我们再测 Method=GET,

Before=2010-11-28T00:00:00.000+08: 00删除

访问结果正常

将数据改为 POST,访问结果错误

相关文章
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
458 15
|
6月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
257 0
|
5月前
|
Java Nacos 网络架构
Spring Cloud gateway 网关四 动态路由
Spring Cloud gateway 网关四 动态路由
|
5月前
|
微服务
springCloud之路由网关gateway
springCloud之路由网关gateway
|
6月前
|
Java Nacos 网络架构
SpringCloud Gateway的使用 + Nacos动态路由
SpringCloud Gateway的使用 + Nacos动态路由
|
6月前
|
网络架构
Gateway路由
Gateway路由
|
6月前
|
JSON Java Nacos
spring-gateway 基于 nacos 配置文件的动态路由
spring-gateway 基于 nacos 配置文件的动态路由
163 0
|
6月前
|
Java 数据库 Nacos
spring-gateway基于数据库 + nacos 的动态路由
spring-gateway基于数据库 + nacos 的动态路由
178 0
|
前端开发 应用服务中间件 API
简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析
简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析
315 0
|
负载均衡 Java Nacos
Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find
Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find
372 0