2012-06-19 93 views
3

我對分佈式JMS進行了一些測試,目前我遇到以下問題。JBoss消息傳遞和XA事務:JMS消息丟失

我有兩臺服務器。第一個是帶有JBoss Messaging 1.4.3的JBoss 5.1,第二個是帶有兩個MDB的JBoss 5.1。一個MDB將消息從隊列A路由到B.另一個是做相反的 - 從B到A的路由。因此隊列A和B上的消息總和應該是恆定的。只要我正確關閉服務器。

但是,如果我崩潰了其中一臺服務器的進程(使用kill -9),我可以觀察到消息丟失(不是很多但可見)。我不明白爲什麼。看起來它畢竟不是在使用XA。

我試過HSQLDB和Oracle作爲JBM服務器上的持久性,但效果是一樣的。

我使用JmsXA作爲ConnectionFactory

任何想法是怎麼回事?

回答

5

正如我理解你的問題,你試圖跨多個服務器(JVM)協調XA事務,這要求你的服務器配置了JTS,並且JBoss服務器通常只在默認情況下爲JTA配置。只是爲了確保我們在這裏談論同樣的版本中,當我眼珠子我的控制檯日誌上啓動的JBoss AS 5.1,它報告以下的JBossTS版本:

08:46:59678 INFO [TransactionManagerService進行]的JBossTS交易 服務(JTA版本 - 標籤:JBOSSTS_4_6_1_GA_CP07

假設在你正在運行的版本相同的一般附近,你應該檢討包含在此下載可用的JBossTS文檔中的所有文檔:jbossts-full-4.6.1.GA.zip 。具體來說,看PDF標題的JBossTS 4.6.0服務器集成指南,其中除其他事項外定義了不同個性的阿朱事務管理的爲:

的JBossTS由交易引擎,ArjunaCore,與多個 '個性'圍繞它分層。

的JBossTS JTA提供了JTA 1.1 兼容的事務for Java企業版 應用經理。事務範圍僅限於單個JVM。這是 適合在不需要事務的應用程序中使用 JVM之間的業務方法調用上下文傳播。例如,對於僅使用單個應用程序服務器實例的部署,或者僅使用多個此類實例進行負載均衡的部署,而兩者之間沒有事務性通信。

的JBossTS JTS提供基於CORBA的分佈式事務管理 可以要麼雖然JTS本地API或雖然JTA 接口驅動。它適用於事務上下文 必須跨越多個JVM(例如部署在 應用程序服務器集羣上的Java EE應用程序)或需要互操作性的環境,這些應用程序服務器之間的異構Java業務方法調用或Java和遺留應用程序,用 另一種語言編寫,並帶有CORBA綁定。

,並斷言:

對於涉及多個JVM交易中使用的情況下,JTS的JBossTS需要 。

另請參閱關於JBoss Messaging XA配置的限制條款。請務必按照標題爲JBoss Messaging XA Recovery Configuration的章節中的JTA文檔中列出的配置說明進行操作。

該文檔提供了您需要做什麼的體面總結,但是獨立JBossTS實例的安裝和配置的詳細信息在標題爲JBoss Transactions 4.6.0安裝指南的文檔中,而替換AS 5.1 JTS服務JTA事務服務在5.1發行版本身就是一個文檔中概述了<的jboss-家> \文檔\ \實例交易\ README.txt文件


說了這麼多,如果有是任何你可以用你的解決方案來實現的方法服務器,我懷疑你會發現最好的方式去。

乾杯。

//尼古拉斯

P.S.一旦你已經JTS正確安裝,控制檯日誌會顯示這樣的事情在啓動時:

09:41:03558 INFO [TransactionManagerService進行]的JBossTS事務服務(JTS **版本 - 標籤:JBOSSTS_4_6_1_GA_CP07)**

0

單獨啓用XA的連接工廠不能保證事務性。發件人和收件人都應聲明他們正在使用事務,如Java EE 6文檔中所示約Container-managed transactions docs

此外,請確保您的郵件持續發送。我會推薦一些事務管理器的跟蹤/調試日誌記錄,以確保你的事務在他們應該正確的時候提交。

+0

當路由方法結束之前發生異常在jms上沒有任何變化,所以它看起來像事務回滾工作正常... – androdevo