我正在處理一個獨立的MQ JMS應用程序,我們的應用程序需要「知道」客戶端已經使用消息生產者放入隊列。因爲客戶端應用程序不是我們的責任。所以我們不能讓他們寫「msg.acknowledge();」在他們身邊的事情(msg.acknowledge()不是我的條件下的正確方法)。我在stackoverflow中搜索歷史答案。查找以下是完全一樣的東西我想:發件人如何知道已使用MQ JMS API的消息?
https://stackoverflow.com/questions/6521117/how-to-guarantee-delivery-of-the-message-in-jms
Do the JMS spec or the various implementations support delivery confirmation of messages?
我的問題是,是否有任何其他方式的MQ API或JMS API中的存檔嗎?我只需要在msg生成端進行編碼,它可以是隊列或主題。
另一個問題是在JMS中的確認模式CLIENT_ACKNOWLEDGE,是不是產生了不相關的?我始終認爲,這種模式可以在調用send()方法時阻止應用程序,直到客戶端使用消息並調用msg.acknowledge(),但似乎不是這樣。產品在消息傳遞後才退出應用程序,消息只是存儲在隊列中,直到客戶端調用acknowledge()。這有可能讓生產者的應用程序等待,直到消息被客戶確認爲止。
如果我的觀念不對,請糾正我,謝謝。
感謝Shashi,您的回覆非常有用。我們需要知道消費者獲得消息並記錄我們的時間戳。所以我們需要知道消費者已經收到消息。如何使用主題來歸檔呢?那是不一樣的嗎?我知道主題可以同步傳遞消息。如果我使用持久訂閱,那可以滿足我的要求嗎? – phyerbarte 2012-01-06 06:43:42
順便說一句,正如你所提到的,我們可以從隊列中檢查消息ID,以確定消息是否已被客戶端使用,是所謂的JMS瀏覽?我對JMS技術細節並不熟悉,只想確認一個方向,然後我可以研究它。再次感謝。 – phyerbarte 2012-01-06 06:47:03
@Shashi,在MQ(IBM)的情況下,客戶端是否必須發送確認消息已經讀取?如果沒有,那麼自動確認段的確切時間是否發送回q管理器?它是在onMessage被調用之後? – bluelurker 2016-02-01 14:43:02