什麼是死消息?
當一個消息被返回或回收後,JMS 立即準備再次發送該消息,但是錯誤情況仍可能沒有被消除,並且應用程序可能仍然不能處理該消息。這樣的消息就被稱爲死消息(dead message),仍然駐留在消息隊列中。
解決方案A
如果指定的存活時間值 (JMSExpiration ) 小於或等於指定的發送時間值,則消息發送成功。否則,消息會悄然無聲地終止。
消息終止
當一個消息被髮送到隊列中時,客戶可以指定一個“存活時間”值。JMS 提供者將不發送已超出存活時間的消息。當超出其存活時間時,存儲在隊列中的消息將會被刪除。
注意:根據 JMS規範,javax.jms.Message 中的 setJMSExpiration() 方法不會被用到應用程序,它被 JMS 自己留作內部使用。然而,應用程序可能通過應用程序服務器設置消息的終止時間。
示例:JMSMessage PutMsg = new JMSMessage(); PutMsg.setJMSDeliveryMode(MQC.MQPER_NOT_PERSISTENT); PutMsg.setJMSExpiration(18000);
解決方案B
我們可以用一個叫 QueueClearProcessor.java 的獨立程序,由它使用 QueueBrowser API 來瀏覽隊列中的舊消息,並每隔一段時間將其從隊列中清除。可以通過消息創建時間來識別出舊消息。爲了訪問創建時間戳,JMS 在消息對象中提供了一個 API 方法: (getJMSTimestamp())
解決方案 C
MQSeries Message Browser 提供一個便利的圖形化界面來查看和操作 MQ 隊列中的消息。通過這個工具 MQSeries 管理員可以在任何消息隊列管理器上顯示消息內容,並可以對每個消息進行操作。
可能的用途
消息瀏覽器可以用於:
1、顯示任何 MQ 消息的完整內容(包括使用十六進制顯示特徵的非文本消息);
2、顯示消息描述符中的字段和一個消息中內嵌的任何 MQ 標題;也可以顯示匹配數字值的命名爲 MQ 的常量;
3、在消息中或在一個隊列的所有消息中搜索特定的消息內容;
4、從隊列中移出單個的消息,或將它們轉移到另一個隊列中;
5、將 MQ 消息保存到文件;
6、創建新的 MQ 消息,並將他們放到當前或者遠程隊列中。
作者簡介 |
|
Raghuram Bharadwaj是Chennai Hexaware 技術有限公司架構小組的系統分析員。他在 BEA Systems HK Ltd,India Liaison Office工作,負責整個亞太地區多方面的諮詢和教學任務。Raghu 在技術層次爲客戶項目提供諮詢,包括 Java、J2EE 和性能管理,同時他也精通 BEA WebLogic 的羣集、安全和應用程序性能調優。 |