如何检查队列中是否有消息

时间:2011-01-13 12:17:57

标签: ibm-mq

我正在使用IBM Websphere MQ。我有队列管理器和队列名称。现在,我想检查队列中是否有任何消息?

我以前没有这方面的工作。请求帮助

如果您需要更多信息,请与我们联系!

由于

3 个答案:

答案 0 :(得分:8)

以下代码是.NET / amqmdnet - 但您可能会尝试在此期间将其转换为Java dev发布您的帖子。

要查看队列中是否有消息,而不实际将其从队列中删除,请在队列上使用MQC.MQOO_BROWSE并选择IBM.WMQ.MQC.MQGMO_BROWSE_FIRST作为选项 如果队列为空,您将获得MQRC_NO_MSG_AVAILABLE

MQMessage queueMessage = new MQMessage();

MQQueueManager queueManager = new MQQueueManager(qmName, channelName, connName);
MQQueuequeue = 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

答案 1 :(得分:1)

答案没有显示如何检查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;
}

答案 2 :(得分:0)

对于Windows机器 这取决于队列管理器的位置。

你可以使用MQUtilities - ih03 pack - 它有rfhUtil.exe(本地Qm)和rfhUtilC.exe(用于远程qm)

对于本地QM,您需要放置适当的值并点击浏览,它会向您显示队列深度。

对于远程QM,为队列管理器名称放置/ TCP /(PortNo),为队列名称放置队列。点击浏览,您将了解队列深度。

对于Unix / Ubuntu / Linux版本 - 有一个名为MQVisualEdit的产品与此类似。