Apache camel 如何在驼峰路由中提交MQ事务?

Apache camel 如何在驼峰路由中提交MQ事务?,apache-camel,ibm-mq,mq,jbossfuse,Apache Camel,Ibm Mq,Mq,Jbossfuse,存在一个路由,该路由由TransactionErrorHandler处理,异常由处理。代码如下所示: ... <bean id="errorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder"> </bean> ... <camelContext errorHandlerRef="errorHandler"> ... <onE

存在一个路由,该路由由
TransactionErrorHandler
处理,异常由
处理。代码如下所示:

...
<bean
    id="errorHandler"
    class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
</bean>
...
<camelContext errorHandlerRef="errorHandler">
    ...
    <onException>
        <exception>java.lang.Exception</exception>
        <handled>
            <constant>true</constant>
        </handled>
        <!-- do some exception handling -->
    </onException>

    <route>
        <from uri="mq:queue://QMgr/Q?exchangePattern=InOut" />
        <transacted />
        <!-- some routing that throws an Exception -->
    </route>
</camelContext>
。。。
...
...
java.lang.Exception
真的
它可以工作,并且在处理错误后会提交事务:
transaction commit(0xfab75a3a)为…
重新交付(true),但随后消息会再次放入输入队列,事务会从头开始(无止境循环)


我们正在使用,我认为这个回滚是由MQ执行的,而不是从驼峰路由执行的。所以问题是:我可以告诉MQ我处理了异常,它不应该再次回滚吗?

IBM MQ正在设计地将消息重新发送给消费者。要使代理在X次尝试后停止,请为IBM MQ配置“回退阈值”和“中断队列”,以便在传递尝试失败后将消息移开。

能否共享完整的bean设置,包括事务管理器和连接工厂?未显示到事务管理器的连线。还有,你确定你的路线应该是InOut吗?该设置仅在传入消息具有JMSReplyTo头时适用。