2014-02-21 89 views
1

我有一個獨立的應用程序(一個簡單的命令行jar),它可以讀取或生成來自/去往ActiveMQ隊列的消息(無事務)。2個ActiveMQ實例之間的事務管理?

我想添加功能,以便能夠從遠程ActiveMQ隊列中讀取消息並將其放入另一個遠程ActiveMQ隊列中。這兩個ActiveMQ可能完全不同,而且不一樣,如果有任何連接問題,我還要確保在傳輸過程中不會丟失任何消息。

我一直在做很多關於事務的閱讀,據我所知,因爲我在2個完全不同的ActiveMQ之間進行了轉換,所以一個簡單的Spring JmsTransactionManager不足以滿足某些分佈式事務管理需求(像XA交易)。

我完全失去了在互聯網上找到的關於幾個不同的圖書館等代碼示例的海洋。

任何人都可以指點我找到這個問題的最簡單的解決方案嗎?我應該以某種方式在Spring之上使用JTA(在非j2ee應用服務器環境中使用JTA是否可行)?我已經使用spring的jmstemplate發送/接收消息,如果我可以繼續使用spring(並且最好不使用xml上下文配置,因爲我今天以編程方式執行所有操作),那將是非常好的選擇。

回答

1

如果您不需要寫入第二個遠程ActiveMQ與讀取處於相同的事務範圍,那麼您可以在沒有分佈式事務的情況下執行此操作。您可以保持打開讀取事務,直到您成功寫入第二個遠程ActiveMQ。一旦成功,您可以提交讀取事務。然而,這意味着,如果在發送之後發生故障,但在讀取提交之前發生故障,您將最終重新發送消息。因此,這假設重複發送沒問題。如果在發生故障時無法容忍重複發送,則必須有分佈式事務。

+0

謝謝。我有同樣的想法,但沒有意識到重複的情況。說實話,我想避免重複,如果可能的話,性能現在不是真正的問題,所以我正在考慮繼續使用分佈式事務。我在這種情況下采用一些3PP JTA實現,比如Atomikos會更好,這是對的嗎?在同樣的遠程ActiveMQ的2隊列之間簡單地移動消息的情況下,Spring的JmsTransactionManager是否足夠用,或者只適用於嵌入式實例? – ByteFlinger

+0

欲瞭解更多關於實現上述分佈式(XA)事務的細節,請看http://stackoverflow.com/questions/22072100/xa-transactions-between-2-jms-brokers-activemq – ByteFlinger