Transactions Camel ActiveMQ回滚不回滚
我试图将一个简单的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.
- 创建计时器以每秒创建一条消息
- 将计时器的消息发送到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);