首页 > 解决方案 > Spring Integration:异步拦截通道

问题描述

我有一个弹簧集成应用程序。它配置了各种通道、转换器、路由器和服务激活器。

要求

每当调用任何服务激活器时,都应保留请求和响应。

解决方案:

我写了一个拦截器来拦截所有需要的通道。然后根据配置,所有必需的请求和响应都保存在数据库中。

上述方法的问题

每当我重新启动我的应用程序服务器时,第一次需要花费太多时间来初始化数据库配置。第二个问题是每当执行持久性逻辑时,流程都处于等待状态。

因此,提供响应需要时间。

指导我希望以异步方式进行持久性。

有没有办法达到同样的效果?我应该为持久性实现实现线程吗?

任何帮助,将不胜感激。

谢谢。

标签: javaspring-mvcspring-integration

解决方案


您正在寻找的技术称为WireTaphttps ://docs.spring.io/spring-integration/docs/current/reference/html/messaging-channels-section.html#channel-wiretap 。

因此,无论要发送到服务激活器的内容,都将发送到“点击”通道。这确实可以转移到其他线程以异步保存到数据库。为此,您可以考虑将该窃听通道设置为 aQueueChannelExecutorChannel.

第一次初始化数据库配置花费了太多时间

从架构的角度来看,这是错误的。初始化测试环境是可以的,但在生产中,您的数据库必须提前准备好,并且应用程序没有任何模式修改。


推荐阅读