首页 > 解决方案 > 确认春季消息

问题描述

我有一个 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,我在其中处理错误并决定需要对该消息执行什么操作。对于一种情况,我希望消息不回滚到队列,这可能吗?我在我的适配器定义中使用“事务处理”,所以我不确定如何驱动这种行为。任何帮助是极大的赞赏!

标签: spring-integrationspring-jms

解决方案


你没有描述transactionManager豆子是什么。如果是JmsTransactionManager,则将其删除,容器将仅使用本地事务。

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

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


推荐阅读