Transactions Camel ActiveMQ回滚不回滚

Transactions Camel ActiveMQ回滚不回滚,transactions,apache-camel,jms,activemq,Transactions,Apache Camel,Jms,Activemq,我试图将一个简单的Camel-ActiveMQ路由示例放在一起,它将回滚事务 这应该是, 创建计时器以每秒创建一条消息 将计时器的消息发送到ActiveMQ 回滚事务 在日志中,我看到它试图回滚事务,但我看到队列中的消息。我的期望是消息不会到达队列 知道我做错了什么吗 import org.apache.activemq.spring.ActiveMQConnectionFactory; 导入org.apache.camel.CamelContext; 导入org.apache.camel.

我试图将一个简单的Camel-ActiveMQ路由示例放在一起,它将回滚事务

这应该是,

  • 创建计时器以每秒创建一条消息
  • 将计时器的消息发送到ActiveMQ
  • 回滚事务
在日志中,我看到它试图回滚事务,但我看到队列中的消息。我的期望是消息不会到达队列

知道我做错了什么吗

import org.apache.activemq.spring.ActiveMQConnectionFactory;
导入org.apache.camel.CamelContext;
导入org.apache.camel.builder.RouteBuilder;
导入org.apache.camel.component.jms.JmsComponent;
导入org.apache.camel.impl.DefaultCamelContext;
导入org.apache.camel.support.DefaultRegistry;
导入org.springframework.jms.connection.jmtransactionmanager;
导入javax.jms.ConnectionFactory;
公共类PushToQueue{
公共静态void main(字符串[]args)引发异常{
CamelContext=新的DefaultCamelContext();
ConnectionFactory ConnectionFactory=新的ActiveMQConnectionFactory();
jmtransactionmanager transactionManager=新的jmtransactionmanager();
transactionManager.setConnectionFactory(connectionFactory);
DefaultRegistry=(DefaultRegistry)context.getRegistry();
bind(“txmanager”,transactionManager);
((org.apache.camel.impl.DefaultCamelContext)上下文);
addComponent(“jms”,JmsComponent.jmsComponentTransactive(connectionFactory,transactionManager));
context.setMessageHistory(true);
addRoutes(新RouteBuilder(){
@凌驾
public void configure()引发异常{
来自(“计时器:activemq计时器”)
.transactid()号
.log(“已创建邮件${id},正文为${body}”)
.to(“activemq:MY_QUEUE_1”)
.log(“已完成发送到队列${id},正文为${body}”)
.rollback();
}
});
while(true)
context.start();
}
}
这是输出

[main] INFO org.apache.camel.impl.engine.AbstractCamelContext - Routes startup summary (total:1 started:1)
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext -     Started route1 (timer://activemq-timer)
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext - Apache Camel 3.9.0 (camel-1) started in 116ms (build:40ms init:62ms start:14ms)
[ActiveMQ Task-1] INFO org.apache.activemq.transport.failover.FailoverTransport - Successfully connected to tcp://localhost:61616
[Camel (camel-1) thread #0 - timer://activemq-timer] INFO route1 - created message  3AC2457AAE3A8FA-0000000000000000 with body 
[ActiveMQ Task-1] INFO org.apache.activemq.transport.failover.FailoverTransport - Successfully connected to tcp://localhost:61616
[Camel (camel-1) thread #0 - timer://activemq-timer] INFO route1 - finished send to queue  3AC2457AAE3A8FA-0000000000000000 with body 
[Camel (camel-1) thread #0 - timer://activemq-timer] WARN org.apache.camel.processor.errorhandler.DefaultErrorHandler - Rollback (MessageId: 3AC2457AAE3A8FA-0000000000000000 on ExchangeId: 3AC2457AAE3A8FA-0000000000000000) due: Intended rollback. Exchange[3AC2457AAE3A8FA-0000000000000000]

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route1            ] [route1            ] [from[timer://activemq-timer]                                                  ] [       188]
[route1            ] [transacted1       ] [transacted                                                                    ] [         0]
[route1            ] [log1              ] [log                                                                           ] [         0]
[route1            ] [to1               ] [activemq:MY_QUEUE_1                                                           ] [        26]
[route1            ] [log2              ] [log                                                                           ] [         0]
[route1            ] [rollback1         ] [rollback                                                                      ] [         0]

[Camel (camel-1) thread #0 - timer://activemq-timer] WARN org.apache.camel.spring.spi.TransactionErrorHandler - Transaction rollback (0x6af93788) redelivered(false) for (MessageId: 3AC2457AAE3A8FA-0000000000000000 on ExchangeId: 3AC2457AAE3A8FA-0000000000000000) caught: org.apache.camel.RollbackExchangeException: Intended rollback. Exchange[3AC2457AAE3A8FA-0000000000000000]
[Camel (camel-1) thread #0 - timer://activemq-timer] WARN org.apache.camel.component.timer.TimerConsumer - Error processing exchange. Exchange[3AC2457AAE3A8FA-0000000000000000]. Caused by: [org.apache.camel.RuntimeCamelException - org.apache.camel.RollbackExchangeException: Intended rollback. Exchange[3AC2457AAE3A8FA-0000000000000000]]
[ActiveMQ Task-1] INFO org.apache.activemq.transport.failover.FailoverTransport - Successfully connected to tcp://localhost:61616
[Camel (camel-1) thread #0 - timer://activemq-timer] INFO route1 - created message  3AC2457AAE3A8FA-0000000000000001 with body 
...

查看代码,似乎使用了两个连接工厂。我创建的一个(并在BEGIN/ROLLBACK事务中使用),以及camel用于实际消息发送的另一个。第二个是在ActiveMQConfiguration#createConnectionFactory中创建的;ActiveMQComponent ActiveMQComponent=ActiveMQComponent.ActiveMQComponent();activeMQComponent.setTransact(true);activeMQComponent.SetTransactiveInput(true);activeMQComponent.setConnectionFactory(connectionFactory);setTransactionManager(transactionManager);addComponent(“activemq”,activeMQComponent);