gpt4 book ai didi

java - 从 MQQueue 中删除顶部消息

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:25 25 4
gpt4 key购买 nike

我正在使用 MQSeries 构建消息系统。出于某种原因,当我执行 q.get(...) 时,我收到异常抛出(我不知 Prop 体的 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() 来检索消息,我们如何删除同一队列上的损坏消息?

谢谢!

最佳答案

我的天啊!

MQQueue q = queueManager.accessQueue("qName1",MQC.MQOO_OUTPUT);
q.get(msg, GMO);

您正在为输出(写入)打开一个队列,但您正在尝试获取一条消息。你的鞋子穿错了脚!!其次,您为什么不捕获 MQ 将抛出的 MQException?异常会包含原因代码,它会为您的问题提供准确的解释。

以下是打开阅读队列的方式:

try
{
int oo = MQC.MQOO_INPUT_SHARED + MQC.MQOO_FAIL_IF_QUIESCING;
MQQueue q = queueManager.accessQueue("qName1",oo);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING;
q.get(msg, gmo);
}
catch (MQException e)
{
System.err.println(e.getLocalizedMessage() );
System.err.println("CC = " + e.completionCode + " - RC = " + e.reasonCode);
}

此外,请确保为特定的 MQ API 调用使用适当的“如果静止则失败”选项。

最后,查找“撤销队列”。如果您的应用程序有消息问题,则应将该消息移至撤销队列,而不是简单地删除。

关于java - 从 MQQueue 中删除顶部消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com