我可以回答爲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)
非常感謝。我的信息是原子的,順序並不重要。 – marabol 2010-04-19 06:22:23