0

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

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

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

谢谢!

4

1 回答 1

0

您需要在 DB 提交后去异步 - 在 DB 更新后使用 ExecutorChannel 或 QueueChannel;然后下游流将在另一个线程上运行,并且事务将在切换后提交。

于 2012-06-01T21:02:25.743 回答