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

Solon Cloud Gateway 补充

说明

在「使用 Solon Cloud Gateway 替换Spring Cloud Gateway 」的文章中,有评论说不知道响应式。当时看的是

Solon Cloud Gateway 使用响应式接口,由 Solon-Rx 来实现,是基于 reactive-streams 封装的 RxJava 极简版。目前仅一个接口 Completable,所以当时以为实现了 ExFilter 返回 Completable 就是响应式了。后续 Solon Cloud Gateway 继续更新文档之后才发现,虽然网关是响应式了,但如果逻辑涉及 IO 或者比较慢的操作,需要在 ExFilter 中开启异步接口,这样才是真正的异步,从而避免对网关的事件循环器造成影响,减少对响应式的性能的伤害。

为了对接同步 IO 接口,Solon 3.2.1 提供了 CloudGatewayFilterSync,用于简化异步调用的编写。

基础版

//同步过滤器(会自动转异步)
@FunctionalInterfacepublic interface ExFilterSync extends ExFilter {@Overridedefault Completable doFilter(ExContext ctx, ExFilterChain chain) {return Completable.create(emitter -> {//暂停接收流ctx.pause();//开始异步RunUtil.async(() -> {try {//开始同步处理boolean isContinue = doFilterSync(ctx);if (isContinue) {//继续chain.doFilter(ctx).subscribe(emitter);} else {//结束emitter.onComplete();}} catch (Throwable ex) {emitter.onError(ex);}});});}/*** 执行过滤同步处理(一般用于同步 io)** @param ctx 上下文* @return 是否继续*/boolean doFilterSync(ExContext ctx) throws Throwable;
}

这个 doFilter 的过程中需要自己先处理 ctx.pause,然后开启异步,并在开启的过程中判断是否异常的提交等等,需要写好这个 ExFitler 的扩展还是有点不容易的。

于是作者又贴心的提供了CloudGatewayFilterSync

简化版

@Component(index = -9)
public class AuthFilterSync implements CloudGatewayFilterSync {@InjectAuthJdbcService authService;@Overridepublic boolean doFilterSync(ExContext ctx) throws Throwable {String userId = ctx.rawQueryParam("userId");//检测路径权限return authService.check(userId, ctx.rawPath());}
}

在简化的版本中,只需要在 doFilterSync 中编写具体的逻辑,而不要关心流的暂停和开启异步等。如果已经处理完毕,不需要继续执行返回 ture,否则返回 false。

参考

https://solon.noear.org/article/813

https://solon.noear.org/article/1005

http://www.xdnf.cn/news/3155.html

相关文章:

  • 配置 Odoo 的 PostgreSQL 数据库以允许远程访问的步骤
  • 远程深度学习新环境配置流程
  • 力扣-数组-41缺失的第一个正数
  • PDM协议---音频数据接收
  • 「动态规划」线性DP:最长上升子序列(LIS)|编辑距离 / LeetCode 300|72(C++)
  • 浅谈C# record关键字
  • CSS:选择器-基本选择器
  • linux联接服务器SSH-局域网内网穿透分享
  • VR 汽车线束培训:探索高效学习新路径​
  • 线性微分方程与非线性微分方程
  • 工业控制「混合架构」PK大战 —— 神经网络 + MPC vs 模糊 PID+MPC 的场景选型与实战指南
  • 数据转储(go)
  • 网络原理 - 12(HTTP/HTTPS - 3 - 响应)
  • 人工智能数学基础(六):数理统计
  • [Android]任务列表中有两个相机图标
  • 2025上海车展 | 移远通信推出自研NG-eCall QuecOpen方案,助力汽车安全新标准加速落地
  • 青少年抑郁症患者亚群结构和功能连接耦合的重构
  • 2025年“深圳杯”数学建模挑战赛B题-LED显示屏颜色转换设计与校正
  • Java从入门到精通 - Java入门
  • 极光PDF编辑器:高效编辑,轻松管理PDF文档
  • 相机的基础架构
  • TwinCAT数据类型,%MX,%MD这些特殊符号
  • 解决 RN Switch 组件在安卓端样式很丑的问题
  • MySQL 基本查询(一)
  • SNR8016语音模块详解(STM32)
  • Python中的内置函数
  • Django 自定义celery-beat调度器,查询自定义表的Cron表达式进行任务调度
  • K8S - GitOps 入门实战 - 自动发布与秒级回滚
  • 运维仙途 第1章 灵机突现探监控
  • 【文献速递】邻位连接技术(PLA)在细胞器相互作用中的应用