我正在使用MQSeries構建消息傳遞系統。出於某種原因,當我執行q.get(...)時,我得到一個異常拋出(我不知道具體的MQException)。下面是導致錯誤的代碼:刪除來自MQQueue的熱門消息
private static MQGetMessageOptions GMO = new MQGetMessageOptions();
private static int GMO_OPTIONS = MQC.MQGMO_SYNCPOINT | MQC.MQGMO_WAIT;
GMO.options = GMO.options | GMO_OPTIONS;
GMO.waitInterval = MQC.MQWI_UNLIMITED;
MQEnvironment.hostname = args[0];
MQEnvironment.channel = args[2];
MQEnvironment.port = Integer.parseInt(args[1]);
MQQueueManager queueManager = new MQQueueManager(args[3])
MQMessage msg = new MQMessage();
MQQueue q = queueManager.accessQueue("qName1",MQC.MQOO_OUTPUT);
q.get(msg, GMO);
我的計劃是,當發生此錯誤時,跳過消息並將其刪除。要執行刪除,我會調用下面的函數:
private void deleteMsg(MQQueueManager queueManager, String queueName) throws MQException {
MQGetMessageOptions tempGmo = new MQGetMessageOptions();
tempGmo.options |= MQC.MQGMO_WAIT;
tempGmo.waitInterval = 1000;
MQQueue remover = queueManager.accessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF);
remover.get(new MQMessage(), tempGmo);
queueManager.commit();
}
會在我deleteMsg功能remover.get()也,在這種特定情況下,失敗出於同樣的原因?或者用於構造MQQueue的選項(MQC.MQOO_INPUT_AS_Q_DEF與MQC.MQOO_OUTPUT)是否也阻止它失敗?如果我無法訪問我的隊列消息,我該如何丟棄頂部消息並轉到下一個消息?
縮短我的問題: 如果我無法在給定隊列上執行get()來檢索消息,我們如何才能刪除同一隊列上的損壞消息?
謝謝!
謝謝您的輸入。我正在捕獲MQException,但不幸的是,我創建的日誌不再存在。所以我無法確定確切的例外情況。我會看看你的其他建議,謝謝。 – Porter