我正在使用IBM Websphere MQ。我有队列管理器和队列名称。现在,我想检查队列中是否有消息?如何检查队列中是否有消息
我以前没有在此工作过。请拨打帮助
如果您需要更多信息,请让我知道!
感谢
我正在使用IBM Websphere MQ。我有队列管理器和队列名称。现在,我想检查队列中是否有消息?如何检查队列中是否有消息
我以前没有在此工作过。请拨打帮助
如果您需要更多信息,请让我知道!
感谢
下面的代码是.NET/amqmdnet - 但你可能尝试这种转换在此期间,直到一个Java开发看到您的帖子。
要看看有没有在队列中的消息,实际上并没有将它从队列中,使用MQC.MQOO_BROWSE
队列和IBM.WMQ.MQC.MQGMO_BROWSE_FIRST
作为选项 你会得到MQRC_NO_MSG_AVAILABLE
如果队列为空。
MQQueueManager queueManager = null;
MQQueue queue = null;
MQMessage queueMessage = new MQMessage();
queueManager = new MQQueueManager(qmName, channelName, connName);
queue = queueManager.AccessQueue(qName,
MQC.MQOO_BROWSE + MQC.MQOO_FAIL_IF_QUIESCING);
MQGetMessageOptions opt = new MQGetMessageOptions();
opt.Options = IBM.WMQ.MQC.MQGMO_BROWSE_FIRST;
queueMessage.CorrelationId = IBM.WMQ.MQC.MQMI_NONE;
queueMessage.MessageId = IBM.WMQ.MQC.MQMI_NONE;
queue.Get(queueMessage, opt);
String sMessage = queueMessage.ReadString(queueMessage.DataLength);
要查看下一条消息,请使用IBM.WMQ.MQC.MQGMO_BROWSE_NEXT
;
要实际读取队列中的消息,请在AccessQueue上使用MQC.MQOO_INPUT_SHARED
。
答案没有显示如何检查MQRC_NO_MSG_AVAILABLE。这是我的解决方案。如果有更好的,请让我知道。
try
{
queue.Get(queueMessage, opt);
String sMessage = queueMessage.ReadString(queueMessage.DataLength);
}
catch (MQException err)
{
if (err.ReasonCode.CompareTo(MQC.MQRC_NO_MSG_AVAILABLE) == 0)
return true;
}
对于Windows机器 这取决于您的队列管理器。
你可以使用MQUtilities - ih03包 - 其中有rfhUtil.exe(本地QM)和rfhUtilC.exe(用于远程QM)
对于本地QM,它是直线前进,你需要将合适的值和命中浏览时,它会显示队列深度。
对于远程QM,Place/TCP /(PortNo)表示队列管理器名称和队列名称的队列。点击浏览,你会知道队列深度。
对于Unix/Ubuntu/Linux版本 - 有一个名为MQVisualEdit的产品,它与此类似。
请提供哪些开发平台/语言? Java,C#等 – StuartLC 2011-01-13 12:20:22
对不起,这是在Java – 2011-01-13 12:40:16