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

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

相关文章:

  • MCP 服务器搭建【stdio 类型】实现上市公司年报查询总结,配合 Cherry Studio使用简单
  • AnimateCC教学:形状补间动画的代码实现
  • 宇树科技举办“人型机器人格斗大赛”
  • C# 异步详解
  • 在Electron中爬取CSDN首页的文章信息
  • pymysql
  • GitHub修炼法则:第一次提交代码教学(Liunx系统)
  • Web应用开发指南
  • mysql 配置文件中的[client]、[mysqld]、[mysqldump]和[mysql]区块的作用区别
  • AIGC 大模型微调实战:中小企业如何用自有数据训练专属 AI 模型?
  • 无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享
  • Spring AOP概念及其实现
  • 计算机图形学:(二)MVP变换示例
  • centos升级glibc
  • 树莓派智能摄像头实战指南:基于TensorFlow Lite的端到端AI部署
  • 如何写好Verilog状态机
  • SV 仿真的常识
  • SQLServer多版本兼容Java方案和数据采集
  • 【网工第6版】第6章 网络安全③
  • 基于标注数据的情感分析模型研究
  • 马上评|启动最高层级医政调查,维护医学一方净土
  • 前行中的“模速空间”:要攻克核心技术,也要成为年轻人创业首选地
  • 海南机场拟超23亿元收购美兰空港控股权,进一步聚焦机场主业
  • 坚持科技创新引领,赢得未来发展新优势
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 书业观察|一本书的颜值革命:从毛边皮面到爆火的刷边书