2011-05-19 146 views
2

問題如何停止向消息驅動Bean發送消息?

是否有可能停止驅動Bean(編程)消息,所以它不消耗新郵件,但運行的事務照常流程?

(這是How to stop message processing before undeploying?的後續)。

鑑於

  • 的JBoss 4.2.3與JBoss消息
  • 驅動Bean一則短消息,根據EJB 2.0

失敗嘗試

  • 我想喜歡使用MBean我但很遺憾,它會立即關閉交易(請參閱錯誤#EJBTHREE-1870),因此會導致很多例外情況。
  • 我試圖在JMX控制檯中將最大池大小降爲0,但活動會話的數量完全不受影響。
  • 我可以停止排隊,但是我必須在生產者中處理NameNotFoundException

回答

1

那麼這裏是一個雖然,幾乎什麼都可以用包裝材料實現, 你可以讓MDB保持收到消息,但引進一個布爾stopDelivery, 而要去消息業務邏輯進行處理之前,檢查是否stopDelivery是 設置爲true,如果是這樣,請將消息重新發回到它來自的隊列。

因此,即使隊列還在動,但除非ü未設置stopDelivery,隊列的內容是種凍結

+0

但包裝MDB仍消耗的消息。在消息被重新發送到隊列之前,應用程序未被部署時,消息可能會丟失。 – 2012-09-19 06:43:18

+1

看起來MDB並不適合這個場合,那麼你將不得不深入1層,我建議你看看java JMS代碼,你可以創建一個消息消費者,它支持receive和peek方法,所以你可以決定何時接收消息並從隊列中消費它 – 2012-09-20 09:57:06

+0

http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/jms_tutorialTOC.html – 2012-09-20 09:59:21