MQSeries を使用してメッセージング システムを構築しています。何らかの理由で、q.get(...) を実行すると、例外がスローされます (具体的な MQException はわかりません)。以下は、エラーの原因となっているコードです。
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() を実行してメッセージを取得できない場合、同じキューで破損したメッセージを削除するにはどうすればよいですか?
ありがとうございました!