2014-12-05 84 views
1

我使用JMS:消息驱动通道适配器,其中我需要处理通过多个SI部件涉及处理和最后更新数据库或在某些情况下发送JMS消息的消息。事务消息驱动沟道适配器

我怎样才能让这条消息的处理完全事务,这意味着应导致任何错误消息回滚到JMS队列。我看到你可以有一个事务管理器,但没有看到任何示例如何为这种情况配置一个。

而且,因为我已经并发消费者设置为较大的数字,所以我会想了解它是如何的情况下表现的回滚,会比立即可用的消息,任何其他消费,甚至相同的消费者?

自公司最有可能是另一个消费者会失败得这么有多少次这样的消息将被继续传递(重试),如何处理这样的情况。

非常感谢您

回答

1

设置acknowledge="transacted"和配置适配器上的JDBC事务管理; JDBC事务将与JMS事务同步。

有一个小的可能性JDBC TX可能犯和JMS回滚(如果你输了,例如连接),所以你需要处理重新输送及使你的代码幂等;否则你需要完整的XA。

的选项的完整说明,请参见this article

无法控制哪些消费者会得到重新送货。

在您的JMS代理上配置重试,DLQ等。

编辑:

只是要清楚,这个工作是因为如上所述,消息通道必须是直接的渠道(或发布 - 订阅,没有任务执行),因此下游业务(JMS,JDBC )在侦听器容器的线程上运行。它还假定这些下游操作使用JmsTemplate(与侦听器的连接工厂) - 它将使用侦听器的Session或带有相同事务管理器的JdbcTemplate

Spring集成出站适配器在内部使用这些组件。

+0

谢谢加里,这很有帮助。只要JDBC事务控制处理,它应该是足够的,因为系统无论如何都被设计为处理重复的消息。 – Mark1234 2014-12-05 17:16:24

+0

增加了一些说明 - 我不确定Stack Overflow是否会通知提问者有关回答编辑的问题。 – 2014-12-05 18:15:35

+0

再次感谢,我将按照解释对它进行测试,并希望它能起作用。 – Mark1234 2014-12-05 18:37:07

相关问题