2017-09-01 115 views
0

MDB通過Java EE容器調用onMessage()方法傳遞消息。消息驅動Bean可以同步處理JMS消息嗎?

這允許客戶端(MDB)不需要在主題或隊列上調用接收的異步消費,而是容器/提供者將自動將消息傳遞給它。

無論如何我們可以使用MDB進行消息的同步消費嗎? 我們可以在PostConstruct方法或某個目的地的onMessage方法中創建一個連接,並調用receive()?

如果這個大寫字母是可能的,那麼我們可以從它推斷出什麼?那就是MDB可以同時和異步地處理消息嗎?

回答

0

我假定你知道:oracle tutorial to mdbs

一旦bean已經被觸發,它可以使用JMS接口上的任何資源,只要你想。您可以收到更多消息,您可以在該主題上添加更多消息,等等。

但是,您依賴最初由主題或隊列上的消息觸發,MDB已定義。 如果您希望在消息放入隊列中時立即觸發MDB,爲什麼不直接在Bean上調用onMessage或類似的東西?

If this upper case is a possibility then what can we deduce from 
it? That is MDB can handle messages both synchronously and asynchronously? 

MDB最初是異步觸發的。這是MDB的主要特徵。之後它作爲一個幾乎正常的bean做什麼對此沒有影響。

更多內容: MDB是同步還是異步使用的問題取決於底層的消息傳遞框架。在EJB中它是異步定義的。 MDB通常在另一個線程中調用,而不是最初發送消息的客戶端。例如,mockrunner-jms是一個內存消息傳遞框架,可以在嘗試測試消息傳遞時使用,可以配置,在同一線程中同步調用消費者。