【问题标题】:Spring Integration, JMS Inbound channel gateway and transactionsSpring 集成、JMS 入站通道网关和事务
【发布时间】:2012-06-01 20:40:51
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 2015-10-04
      • 1970-01-01
      • 2013-08-21
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      相关资源
      最近更新 更多