Java 使用ActiveMQ的Apache驼峰路由的XA事务

Java 使用ActiveMQ的Apache驼峰路由的XA事务,java,transactions,apache-camel,xa,atomikos,Java,Transactions,Apache Camel,Xa,Atomikos,我的要求是,如果在处理给定的驼峰路由时出现问题,我的消费者将在ActiveMQ中轮询源队列中留下消息 我的理解是,我需要一个XA事务来处理这个问题。我想通过JavaDSL设置Camel。没有安装EE容器 我举了这个例子来说明工作原理。基于此,我创建了另一个@Test 有一个RouteBuilder可以创建如下所示的测试路由: from("jms:xa_input?transacted=true") .transacted("

我的要求是,如果在处理给定的驼峰路由时出现问题,我的消费者将在ActiveMQ中轮询源队列中留下消息

我的理解是,我需要一个XA事务来处理这个问题。我想通过JavaDSL设置Camel。没有安装EE容器

我举了这个例子来说明工作原理。基于此,我创建了另一个@Test

有一个RouteBuilder可以创建如下所示的测试路由:

                from("jms:xa_input?transacted=true")
                    .transacted("PROPAGATION_REQUIRED")
                    .log("Processing message: ${body}")
                    .process(new ThrowExceptionProcessor(new Exception("error)))
                    .to("jms:xa_output");
异常应模拟失败的目的地

当我现在(通过ActiveMQ的web控制台)向xa_输入发送消息时,该消息将从队列中退出队列并消失。它没有路由到xa_输出或DLQ。我确实希望消息保留在xa_输入中


如何防止ActiveMQ使用者退出消息队列?

事务可能很难正确配置-您可能需要购买该书以阅读其事务章节,或者购买《骆驼行动手册》(第1版或第2版)。或者尝试阅读tx上的Camel文档:并且您可能不需要XA,如果您只使用同一个JMS代理,那么使用本地事务要好得多。事实上,这只是一个测试场景。最后,我希望将队列消息转发到远程SOAP端点。如果失败,我需要在稍后的时间点重试相应的消息,并从队列中对以下消息进行正确的消息排序。