2011-01-13 121 views
0

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

我以前没有在此工作过。请拨打帮助

如果您需要更多信息,请让我知道!

感谢

+0

请提供哪些开发平台/语言? Java,C#等 – StuartLC 2011-01-13 12:20:22

+0

对不起,这是在Java – 2011-01-13 12:40:16

回答

7

下面的代码是.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

0

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

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

你可以使用MQUtilities - ih03包 - 其中有rfhUtil.exe(本地QM)和rfhUtilC.exe(用于远程QM)

对于本地QM,它是直线前进,你需要将合适的值和命中浏览时,它会显示队列深度。

对于远程QM,Place/TCP /(PortNo)表示队列管理器名称和队列名称的队列。点击浏览,你会知道队列深度。

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