Transactions 2个ActiveMQ实例之间的事务管理?

Transactions 2个ActiveMQ实例之间的事务管理?,transactions,jms,activemq,spring-jms,xa,Transactions,Jms,Activemq,Spring Jms,Xa,我有一个独立的应用程序(一个简单的命令行jar),它可以从ActiveMQ队列(无事务)中读取或生成消息 我想添加能够从远程ActiveMQ队列读取消息并将其放入另一个远程ActiveMQ队列的功能。这两个ActiveMQs可能完全不同,也不相同,我还希望确保在传输过程中,如果存在任何连接问题,不会丢失任何消息 我已经读了很多关于事务的书,据我所知,因为我在两个完全不同的ActiveMQs之间进行转换,一个简单的Spring JmsTransactionManager是不够的,而是需要某种分布式

我有一个独立的应用程序(一个简单的命令行jar),它可以从ActiveMQ队列(无事务)中读取或生成消息

我想添加能够从远程ActiveMQ队列读取消息并将其放入另一个远程ActiveMQ队列的功能。这两个ActiveMQs可能完全不同,也不相同,我还希望确保在传输过程中,如果存在任何连接问题,不会丢失任何消息

我已经读了很多关于事务的书,据我所知,因为我在两个完全不同的ActiveMQs之间进行转换,一个简单的Spring JmsTransactionManager是不够的,而是需要某种分布式事务管理(如XA事务)

我完全迷失在互联网上关于几个不同库等的大量代码示例中


有人能告诉我找到这个问题最简单解决办法的方法吗?我是否应该在Spring之上使用JTA(在非j2ee应用服务器环境中使用JTA是否可行)?我已经在使用spring的jmstemplate来发送/接收消息,所以如果我能继续使用spring(最好不要使用xml上下文配置,因为我现在做的一切都是通过编程实现的)。

如果您不需要将对第二个远程ActiveMQ的写操作与读取操作置于同一事务范围内,然后您就可以在没有分布式事务的情况下完成这项工作。在成功写入第二个远程ActiveMQ之前,可以保持打开读取事务。一旦成功,您就可以提交读取事务。但是,这意味着,如果在发送之后但在读取提交之前失败,您将重新发送消息。因此,这假设重复发送是正常的。如果您不能容忍在发生故障时重复发送,则必须具有分布式事务。

谢谢。我也有同样的想法,但没有意识到复制的情况。老实说,如果可能的话,我希望避免重复,而且性能目前不是一个真正的问题,所以我考虑继续使用分布式事务。我认为在这种情况下,我最好使用一些3PPJTA实现,比如Atomikos,对吗?同样,在同一远程ActiveMQ中的2个队列之间简单移动消息的场景中,spring的JmsTransactionManager是否足够,还是仅适用于嵌入式实例?有关上述分布式(XA)事务实现的更多详细信息,请参见此处