Gateway路由谓词工厂实例
本文编写一些测试例子来说下gateway中的内置路由谓词工厂。
文章目录
- 环境准备
- 常见路由谓词工厂
- 实战部分
- 路径-谓词工厂
- 后时刻-谓词工厂
- 前时刻-谓词工厂
- 时间段-谓词工厂
- cookie-谓词工厂
- 方法-谓词工厂
- 请求头-谓词工厂
- 查询参数-谓词工厂
- 主机-谓词工厂
- RemoteAddr/网段-路由谓词工厂
- 权重-谓词工厂
- 本文小结
环境准备
为了测试gateway的使用,使用springboot搭建了简单服务。服务是注册在注册中心nacos中,网关没有在注册中心注册,后面介绍动态网关的时候再进行注册。
搭建了一个端口为8581的order服务
常见路由谓词工厂
官网给出的内置路由谓词工厂
实战部分
路径-谓词工厂
-Path=路径1
exmaple: 请求Url包含/order/**时触发路由 ,将请求转发到order-service服务中
具体配置如下:
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:#匹配对应URL的请求,将匹配到的请求追加在目标URI之后- Path=/order/**
网关测试
先看实际效果,再分析
通过访问网关的http://localhost:8888/order/getNameAndPort 接口调用到了 order服务 localhost:8581/order/getNameAndPort 接口。这个是最简单,也是常用的路由规则。
后时刻-谓词工厂
可以设置一个时间点,当系统时间大于设置时间点时才会将请求进行路由。
– After=时刻
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:# [Asia/Shanghai] 为时间所对应的时区- After=2020-10-10T21:21:21.993+08:00[Asia/Shanghai]
测试结果
这样设置后谓词工厂后呢,即是当系统时间(上海时区)大于2020年10月10日21点21分21秒后 ,才会将请求进行路由。
前时刻-谓词工厂
与后路径谓词工厂一样,一样是支持一个时间点设置,当当前请求时间小于设置的路由时间时,才会将请求进行路由。
– Before=时刻
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:# [Asia/Shanghai] 为时间所对应的时区- Before=2022-10-10T21:21:21.993+08:00[Asia/Shanghai]
测试结果
时间段-谓词工厂
这个时间段路由谓词呢,实际就是 前时刻 后时刻 两个路由谓词的综合,其配置需要设置两个时间点,当请求时间在这两个时间点之间,则会触发路由,反之则不进行路由。
-Between=时刻1,时刻2
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:# [Asia/Shanghai] 为时间所对应的时区- Between=2022-01-01T22:22:22.993+08:00[Asia/Shanghai],2022-10-10T10:10:10.993+08:00[Asia/Shanghai]
测试结果
cookie-谓词工厂
看名字,即可猜出当前路由触发条件了,即当我们的请求包含某cookie的时候才会进行路由,
– Cookie=cookie名字,值(值支持正则表达式)
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- Cookie=username,zs
如果按照我这么配置,那么我们的请求必须携带userme的cookie ,且其值必须为zs。
当cookie不满足时,则无法触发路由
方法-谓词工厂
所谓方法谓词工厂,即是根据HTTP请求类型匹配来路由,例如GET、POST、PUT、DELETE等等,可配置多种请求方法。
– Method=GET,POST
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- Method=GET,POST
测试结果
当为put请求的时候
请求头-谓词工厂
例如我们在实际开发中,通常会设置一个token请求头,当有些接口需要登录访问,则会校验当前请求是否携带一个token请求头…
或者说,我们前后端交互的时候,要求前端向后端传输JSON格式的参数,那么在HTTP请求的时候,需要加上一个Content-Type= application/json 的一个键值对请求头…
我们的请求头谓词呢,即是要求当前HTTP请求必须携带定义的请求头才会触发路由
– Header=Authentication,zs
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- Header=Authentication,zs
当我们的请求没有携带设置的请求头时
当我们的请求携带设置的请求头时
查询参数-谓词工厂
即当我们的请求中含有某个请求参数时,才会进行路由。此设置则只要求请求参数中必须携带参数名为:【参数名】
– Query=【参数名】
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- Query=name
无设置的参数请求
有gateway路由谓词设置的参数请求
主机-谓词工厂
即需要我们的请求头中必须要携带设置的主机信息,才会对我们的请求进行路由。
主机名列表可设置多个,例如下边这样
– Host=主机1,主机2,主机3…
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- Host=**.zs.org
** 则支持模糊匹配
携带Host信息的时候
不携带或者错误的host信息
RemoteAddr/网段-路由谓词工厂
当前谓词呢,即只接受设置的某一网段类的请求,当请求来自于某一网段时,才会触发路由
–RemoteAddr=192.168.0.1/24
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- RemoteAddr=192.168.0.1/24
即当请求方的IP为192.168.0.1-192.168.0.24之间时,才会触发路由。
权重-谓词工厂
我们做后端的,都应该知道这个词:负载均衡。而在负载均衡中呢,又涉及到了负载的权重策略 ,例如随机、轮询、权重等。何为权重?权重,说白了就是某一因素对某一事物的重要程度,程度的高低则为权重的高低。
在路由谓词的时候即支持权重了,可根据我们配置的权重比,将请求进行相应量化的转发,其需要设置两个参数一个是group一个是weight,即权重分组和权重比。
– Weight=组, 权重比
server:port: 8888spring:application:name: api-gatewaycloud:gateway:#路由规则routes:#路由ID,唯一- id: server-order#目标URI,路由到微服务地址uri: http://localhost:8581#断言,判断条件predicates:- Weight=testWeight, 2- id: server-order2#目标URI,路由到微服务地址uri: http://localhost:8582#断言,判断条件predicates:- Weight=testWeight, 1
两次8581的服务,一次8582的服务
本文小结
本文介绍了现在常用的gateway各种内置的路由谓词工厂,编写了简单的实例来进行说明。
Gateway路由谓词工厂实例相关推荐
- Spring Cloud Gateway(一)为什么用网关、能做什么、为什么选择Gateway、谓词工厂、过滤器配置
1.为什么用网关?能做什么?为什么选择Gateway? 1.1.为什么用网关 网关api:封装了系统内部架构,为每个客户端提供一个定制的 API.在微服务架构中,服务网关的核心要点是,所有的客户端和消 ...
- spring-cloud(十一)GateWay强大的路由谓词(断言)功能
spring-cloud-Hoxton.SR6 (十一)GateWay强大的路由谓词(断言)功能 本文spring-cloud 版本为:hoxton.sr6 本文spring-boot版本为:2.2. ...
- Spring Cloud Alibaba - 25 Gateway-路由断言工厂Route Predicate Factories谓词工厂示例及源码解析
文章目录 官网 The After Route Predicate Factory 小栗子 AfterRoutePredicateFactory源码 The Before Route Predicat ...
- Spring Cloud Gateway 路由转发之After(Before)路由断言工厂使用
前言 本文旨在介绍After(Before)路由断言工厂使用,以此类推可以使用其他路由断言工厂 案例 1.概念 网关简单的说就是提供一个对外统一的API入口和出口,统管企业对外的所有API出口.一般来 ...
- Spring Cloud Gateway之路由断言工厂篇
1. 背景 最近,需要提升系统安全性,市面上有很多款网关服务的技术方案,最终选择了Spring Cloud Gateway. 2. Spring Cloud Gateway工作机制 官网配图: 客户端 ...
- GateWay路由网关的概述与入门详解
一.概述简介 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/h ...
- 三分钟了解Spring Cloud Gateway路由转发之自动路由
文章目录 一.前言 二.路由配置 1. 静态路由 2. 动态路由 3. 自动路由 三.Spring Cloud Gateway 是如何实现动态路由 工作原理 源码解析 路由转发原理 路由转发源码解析 ...
- Spring Cloud Alibaba - 26 Gateway-自定义谓词工厂RoutePredicateFactory
文章目录 需求 三部曲 第一步 搞配置类 第二步 搞自定义谓词工厂 第三部 搞配置 验证 源码 需求 我们看了官方提供的几个例子,如果都不满足呢? 举个例子: 实现一个类似 12306订票管控的需求: ...
- gateway路由网关,zuul的替代品
zuul1 low, zuul2 还没长大呢,不敢用. gateway 基于netty, spring flux, reactor 异步非阻塞, 快呀. 与spring良好整合, spring社区的呢 ...
最新文章
- PG 9.4 行冻结信息的测试
- 02_Mybatis动态代理
- Windows、Linux和MAC的CR, LF, CR/LF换行符
- Educational Codeforces Round 114总结
- spark简介(大数据技术)
- 在intellij idea 中怎么不用git 解除关联
- 程序员的黑科技_用代码回复博客
- SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例
- opencv 实现图像时钟
- php中的常用魔术方法总结
- 遥感常用数据下载链接
- Mac开机速度优化的详细教程
- 如何在高共模电压下测量小差分电压
- Unity3DAI行为------路径跟随
- 基于 mycat,我实现了一个数据库透明加密中间件
- 系统组件:工具栏Toolbar
- 设置表头QHeaderView
- Android面试总结(持续更新修改)
- 视频捕捉全教程(vc+vfw)
- python 列表去重 保持顺序
热门文章
- C#里的进制与ASCII转换
- Python报错too many values to unpack解决方案
- “体验版”PyTorch 2.0备受瞩目,它到底好在哪里?
- NOI2006:金明的预算方案
- fluentd收集K8S日志并以K8S的container_name作为索引名存入Elasticsearch中
- 集运系统,集运下单系统,国际物流集运系统,转运系统源码 集运系统源码
- 记录一下家里双路由实现wifi漫游功能
- 2019届大疆提前批校招机器学习岗笔试B卷
- C++小白入职如何快速上手
- HC3i论坛医疗信息化热门资源100个