java - Spring Integration:异步拦截通道
问题描述
我有一个弹簧集成应用程序。它配置了各种通道、转换器、路由器和服务激活器。
要求
每当调用任何服务激活器时,都应保留请求和响应。
解决方案:
我写了一个拦截器来拦截所有需要的通道。然后根据配置,所有必需的请求和响应都保存在数据库中。
上述方法的问题
每当我重新启动我的应用程序服务器时,第一次需要花费太多时间来初始化数据库配置。第二个问题是每当执行持久性逻辑时,流程都处于等待状态。
因此,提供响应需要时间。
指导我希望以异步方式进行持久性。
有没有办法达到同样的效果?我应该为持久性实现实现线程吗?
任何帮助,将不胜感激。
谢谢。
解决方案
您正在寻找的技术称为WireTap
:https ://docs.spring.io/spring-integration/docs/current/reference/html/messaging-channels-section.html#channel-wiretap 。
因此,无论要发送到服务激活器的内容,都将发送到“点击”通道。这确实可以转移到其他线程以异步保存到数据库。为此,您可以考虑将该窃听通道设置为 aQueueChannel
或ExecutorChannel
.
第一次初始化数据库配置花费了太多时间
从架构的角度来看,这是错误的。初始化测试环境是可以的,但在生产中,您的数据库必须提前准备好,并且应用程序没有任何模式修改。
推荐阅读
- visual-studio-code - VS Code 不会解析 wsl 路径
- python - 如何修改PE文件头中的TimeDateStamp字段?
- javascript - 固定可滚动正文和标题的 Bootstrap 4 表
- javascript - 不可预测的行为 JavaScript
- android - 在不更改版本号的情况下更新 android 应用
- python - Pyinstaller 抛出“没有名为 multipart 的模块”、“没有名为 image 的模块”、“没有名为 text 的模块”、“没有名为 message 的模块”
- php - Wordpress 循环生成相同名称的列表元素,如果帖子编号较少,则查询
- python - 如何在虚拟环境中安装模块
- sql - 动态查询使用 2 个参数执行插入
- multithreading - ptr_ring 代码实现中的数据竞争