弹簧集成,JMS入站通道网关和事务



我正在使用配置了 jms:消息驱动通道网关的 SI。我的用例是从队列接收消息,通过 JDBC 将其保存到数据库,从队列提交消息,然后让该消息根据其类型继续流经各种通道。如果消息随后出错,这没关系,因为我将原始文件存储在数据库中,以便可以重播。

我的问题是在数据库保留后立即尝试从队列中提交事务。这实际上是中流,我只能让 spring 事务管理在最后尝试并提交。这不合适,因为如果在数据库持久化后抛出错误,它仍然将消息留在 JMS 队列上,因为这是外部事务的来源。

那么,有没有一种简单的方法可以从JMS队列中提取消息,保存到数据库,然后将其从队列中提交?

谢谢!

您需要在

数据库提交后进行异步 - 在数据库更新后使用 ExecutorChannel 或 QueueChannel; 然后,下游流将在另一个线程上运行,事务将在切换后提交。

最新更新