Spring Integration,JMS入站通道适配器和事务

时间:2011-05-19 21:53:19

标签: java spring jms integration transactionscope

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

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

那么,是否有一种简单的方法可以从JMS队列中提取消息,保存到数据库,然后将其从队列中提交并为剩余的流启动新事务?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以保存到数据库,然后将消息放入可轮询的频道中:

<channel id="aChannel">
    <queue capacity="10"/>
</channel>

这将使任何后续流程都在新事务中,因为新流程将由不同的线程处理 - 基于您与此可轮询通道关联的轮询器。