2011-05-06 142 views
0

我們有一個場景,在使用消息驅動Bean處理傳入消息A後,我們將後續消息B寫入另一個隊列。我們正在使用Glassfish 3.1。如何在處理入站消息後異步發佈新的JMS消息?

這種情況下的一個目標是發佈消息B可以異步發生,並且不需要可靠 - 也就是說,如果在處理消息A後我們試圖發佈消息B並且失敗,我們不會回滾處理消息A.

第二個目標是發佈消息B不應該阻止或擴展覆蓋消息A的交易範圍。我們希望涵蓋消息A的交易儘快結束並且不被持有在消息B正在處理時打開。

一個想法是使用標記爲@Asynchronous的方法爲此創建一個特殊的EJB,並在onMessage()的末尾查找並調用該EJB。但是,我們不確定這是否是這種情況下的最佳做法。

我們不想引入額外的編排解決方案(例如ESB)來處理這個和更復雜的案例。

回答

0

你試過了嗎?

我的理解是,MDB的是在他們自己的交易。所以B的問題不會回滾。這應該是默認行爲。

+0

我們試圖解決兩個問題。首先,我們不需要在onMessage()中處理消息A的事務來覆蓋我們對消息B所做的任何事情。我們也不希望在處理消息B時發生任何異常,並導致消息A回滾。我們可以通過小心處理異常來處理這部分。第二個問題是,我們希望儘快處理消息A,並儘快發佈任何資源(例如db),因此我們希望在消息A之外發送消息B. – user677891 2011-05-09 14:44:15

+0

您想要分開消息的發送或消息的消費?你是否說你想讓A提交B,但你不希望提交是A的交易的一部分?如果是這樣,爲什麼? – Preston 2011-05-09 17:26:20