我有一个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,我将在其中处理错误并决定需要对此消息执行什么操作。对于一种情况,我希望消息不回滚到队列,这可能吗?我在适配器定义中使用“事务处理”,所以我不确定如何驱动此行为。任何帮助将不胜感激!
答案 0 :(得分:0)
您没有描述transactionManager
bean是什么。如果它是JmsTransactionManager
,请将其删除,容器将只使用本地事务。
然后,仅当error-channel
上的流引发异常时,事务才会回滚。如果该错误流正常退出(“消耗”该错误),则事务将不会回滚。
如果是其他事务管理器(例如JDBC),则将其删除并在稍后的流程中启动JDBC事务(即,不同步JMS和JDBC事务;再次使用本地JMS事务)。