我正在使用 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 vs MQC.MQOO_OUTPUT) 的选项是否会阻止它也失败?如果我在访问队列的消息时遇到问题,如何丢弃最上面的消息并移至下一条消息?
为了缩短我的问题:如果我无法在给定队列上执行 get() 来检索消息,我们如何删除同一队列上的损坏消息?
谢谢!