2011-01-13 115 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的產品,它與此類似。