当前位置: 首页 > news >正文

Spring cloud gateway

配置拆解

route

路由

predicte

断言(谓词),用于简单的验证

  1. path:路径校验
  2. head:header校验,可以校验header中的任意参数
  3. host:只校验请求头中的host参数
  4. query:请求query参数校验
  5. method:请求方法校验
  6. remoteAdress:客户端地址校验
  7. cookies: cookies校验
  8. before/after/between:请求时间校验
  9. weight:指定相同的group,在group内做负载均衡

predicates的可选值看gatewayPredicte的实现类有哪些,取前缀部分

filter

过滤器,加header、parameter
同一个filter可指定多个,例如addRequestHeader可以指定两次,用于添加两个请求头

  1. addRequestHeader:添加请求头
  2. addRequestParam:添加请求参数
  3. FallbackHeaders:可以添加降级时的异常信息

filter的可选值看filterDefination的实现类有哪些,取前缀部分

过滤器有两类:全局过滤器和路由过滤器

全局过滤器

全局过滤器,不需要配置,对所有路由都生效
可以用来实现统一的权限校验、日志记录等能力
自定义全局过滤器示例:
在这里插入图片描述

路由过滤器

可以自定义过滤器,在路由策略中配置使用


@Component
public class RequestPathGatewayFilterFactory extends AbstractGatewayFilterFactory<Config> {public RequestPathGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config) {return new GatewayFilter() {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String path = exchange.getRequest().getPath().toString();System.out.println("path: " + path + ", config: " + config);return chain.filter(exchange);}};}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("name", "path");}@Setter@Getterpublic static class Config {private String name;private String path;}
}

application.yml配置
在这里插入图片描述

filter根据order排序,order小的先执行
在这里插入图片描述

在这里插入图片描述
Spring Cloud Gateway通过执行过滤器将逻辑分为“前置”和“后置”阶段,优先级较高的前置过滤器会优先被执行,而优先级较高的后置过滤器的执行顺序正好相反,最后执行。

在这里插入图片描述

动态路由

  1. 通过SpringCloudGateway提供的
    GatewayControllerEndpoint端点功能,实现路由的增删改查 , 或者自己实现 ApplicationEventPublisherAware 接口,实现自定义的路由操作方法。具体可以参考源码
    在这里插入图片描述
  2. 通过实现RouteDefinitionRepository接口,实现自定义的Repository类,实现从数据库或者缓存中动态加载路由信息的功能

示例

请求/baidu时,转发请求给baidu.com

方式一:yml配置文件
在这里插入图片描述

方式二:代码配置
在这里插入图片描述
在这里插入图片描述

源码

Spring Cloud Gateway中使用HandlerMapping对请求的链接进行解析,匹配对应的Route,转发到对应的服务。下图为整个请求的流程 , 用 户 请 求 先 通 过 DispatcherHandler 找 到 对 应 的GatewayHandlerMapping,再通过GatewayHandlerMapping解析匹配到的Handler;Handler处理完后,经过Filter处理,最终将请求转发到后端服务。

在这里插入图片描述

在这里插入图片描述

最后一个handler是ForwardRoutingFilter
在这里插入图片描述

http://www.dtcms.com/a/265326.html

相关文章:

  • C++2d我的世界V1.4
  • 模型预测专题:强鲁棒性DPCC
  • 智能检测原理和架构
  • 哪个领域数据库最难替换?
  • Softhub软件下载站实战开发(十):实现图片视频上传下载接口
  • rockchip android14 设置不休眠
  • 数学建模_微分方程
  • 商品中心—18.库存分桶的一致性改造文档
  • RedisCluster不可用的6大隐患
  • 通俗理解JVM细节-面试篇
  • 配置tcp的https协议证书
  • [云上玩转Qwen3系列之四]PAI-LangStudio x AI搜索开放平台 x ElasticSearch: 构建AI Search RAG全栈应用
  • JSON 安装使用教程
  • 新版本没有docker-desktop-data分发 | docker desktop 镜像迁移
  • 用Python实现两种爱心效果❤️
  • 人机协同的智能体开发范式(ADS)
  • HCIA-实现VLAN间通信
  • nrf52840蓝牙学习(定时器的应用)
  • Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
  • 从暴力穷举到智能导航,PC本地搜索被腾讯电脑管家“拯救”
  • 【Vue入门学习笔记】Vue核心语法
  • 百度文心 ERNIE 4.5 开源:开启中国多模态大模型开源新时代
  • MYSQL基础内容
  • 读VJEPA 2
  • Linux Mem -- Slub内存分配器基础
  • 08_Excel 导入 - 用户信息批量导入
  • [ linux-系统 ] 软硬链接与动静态库
  • 基于Java+SpringBoot的图书管理系统
  • 【字节跳动】数据挖掘面试题0002:从转发数据中求原视频用户以及转发的最长深度和二叉排序树指定值
  • Scala 安装使用教程