殘留消息清除

清除隊列中的消息
2008年05月30日 星期五 17:32
什麼是死消息?
當一個消息被返回或回收後,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 的羣集、安全和應用程序性能調優。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章