我正在使用IBM Websphere MQ。我有队列管理器和队列名称。现在,我想检查队列中是否有任何消息?
我以前没有这方面的工作。请求帮助
如果您需要更多信息,请与我们联系!
由于
答案 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的产品与此类似。