确认春季消息

时间:2018-11-22 16:38:42

标签: spring-integration spring-jms

我有一个spring集成应用程序,并且正在使用消息驱动的通道适配器来使用消息。这是适配器的定义-

<jms:message-driven-channel-adapter id="messageAdapter" destination="inQueue"
                                    connection-factory="connectionFactory"
                                    error-channel="errorChannel"
                                    concurrent-consumers="${consumer.concurrent-consumers}"
                                    acknowledge="transacted"
                                    transaction-manager="transactionManager"
                                    channel="channel"
                                    auto-startup="true"
                                    receive-timeout="50000"/>

因此,此消息到达我的核心渠道,然后经过一系列服务激活器。在两者之间,如果有错误,则此消息将移至errorChannel,我将在其中处理错误并决定需要对此消息执行什么操作。对于一种情况,我希望消息不回滚到队列,这可能吗?我在适配器定义中使用“事务处理”,所以我不确定如何驱动此行为。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您没有描述transactionManager bean是什么。如果它是JmsTransactionManager,请将其删除,容器将只使用本地事务。

然后,仅当error-channel上的流引发异常时,事务才会回滚。如果该错误流正常退出(“消耗”该错误),则事务将不会回滚。

如果是其他事务管理器(例如JDBC),则将其删除并在稍后的流程中启动JDBC事务(即,不同步JMS和JDBC事务;再次使用本地JMS事务)。