2010-04-07 44 views
2

我想知道,如果有JMS代理,它允許管理員在解決造成的問題(例如數據庫關閉,沒有足夠的空間)後,重新發送(通過GUI或任何工具)消息,保存在ded消息隊列或死信隊列中。 ..)。哪些JMS代理實現允許將消息重新發送保存在死信隊列中?

的WebSphere提供了一個功能重新發送保存在死信隊列中的消息:1
的Glassfish 2.1.1使用Sun Java系統消息隊列4.4沒有功能來做到這一點,我是這麼認爲的。

其他JMS代理有哪些選擇?或者是最好的方法,不使用DMQ/DLQ功能,如果你依賴於消息?

非常感謝

回答

1

我可以回答爲WebSphere MQ而不是任何其他JMS提供者。在WMQ的情況下,有幾個工具,包括死信處理程序(DLH),它可以自動重試DLQ消息以處理像QFULL這樣的瞬態錯誤。例如,隊列填滿並且入站消息溢出到DLQ。 DLH將開始重試這些消息,並且隨着隊列消耗,它將自動替換原始目標隊列中的消息。其他工具可以用WMQ SupportPacs。

一般的經驗法則是你的必須有一些處理有毒消息的過程。理想情況下,這將是一個特定於應用程序的異常隊列,因爲系統DLQ是共享的。我看到很多情況下,多個應用程序將消息泄露給DLQ,而其中一個應用程序的支持團隊清除了整個隊列,而不僅僅是他們的消息。不好。

另一個需要注意的是,登陸DLQ的消息通常會導致消息序列中斷。例如,隊列填充和消息轉到DLQ。隨着隊列消失,消息從DLQ重播,在這些消息到達時它們穿插有新消息。理想情況下,應用程序對消息排序問題不敏感,每個消息都是原子的。這是回答你最終問題的關鍵。您是否使用DLQ取決於應用程序是否對消息排序敏感(至少在WMQ中)。如果排序是一個問題,那麼您就沒有選擇讓消息溢出到第二個隊列並在新消息仍然到達時重播它們。在這種情況下最好讓隊列填滿並關閉或關閉發送應用程序。

你可以閱讀更多的DLH這裏:http://bit.ly/aYJ13q

WMQ的SupportPacs在這裏:http://bit.ly/bdSUfd(查看MA01和MO01)

+0

非常感謝。我的信息是原子的,順序並不重要。 – marabol 2010-04-19 06:22:23

0

注:我爲CodeStreet

工作

有一兩件事你可以做,使用CodeStreet「ReplayService for MQ」來記錄DLQ中的所有消息,然後通過Web-GUI查看/搜索它們。

找到要重新發送的消息後,可以將其拖動到任意MQ主題或隊列中,或指定重播請求以將其重播到目標應用程序。

結賬http://www.codestreet.com/marketdata/jms/jms_mq.php瞭解更多詳情。

相關問題