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

时间:2014-02-21 11:40:54

标签: transactions jms activemq spring-jms xa

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

我想添加一些功能,以便能够从远程ActiveMQ队列中读取消息并将其放入另一个远程ActiveMQ队列中。 2个ActiveMQ可能完全不同而且不一样,我还想确保在传输期间没有任何消息丢失,如果有任何连接问题。

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

我完全迷失在互联网上关于几个不同库等的代码示例的海洋上。

有人能指出我找到解决这个问题的最简单方法的方法吗?我应该以某种方式在Spring之上使用JTA(在非j2ee应用服务器环境中使用JTA是否可行)?我已经使用spring的jmstemplate来发送/接收消息了,如果我能继续使用spring(最好不要使用xml上下文配置,因为我今天以编程方式执行所有操作),这样会很棒。

1 个答案:

答案 0 :(得分:1)

如果您不需要写入第二个远程ActiveMQ与读取处于相同的事务范围,那么您可以在没有分布式事务的情况下执行此操作。您可以保持打开读取事务,直到您成功写入第二个远程ActiveMQ。一旦成功,您就可以提交读取事务。但是,这意味着,如果发送后发生故障,但在读取提交之前,您将最终重新发送消息。因此,这假设重复发送是可以的。如果在发生故障时无法容忍重复发送,则必须具有分布式事务。