2011-01-13 15 views
0

IBM Websphere MQを使用しています。私はキューマネージャとキュー名を持っています。今、キューにメッセージがあるかどうかを確認したいのですが?キューにメッセージがあるかどうかを確認する方法

私はこれまでにこれを実行しませんでした。喜んでお問い合わせください

詳細情報が必要な場合はお知らせください。

おかげ

+0

開発プラットフォームはどれですか? Java、C#etc – StuartLC

+0

Java上の申し訳ありません –

答えて

7

次のコードは、.NET/amqmdnetである - しかし、あなたがしようとするとJavaのdevのはあなたのポストを見るまで、その間にこれを変換することがあります。

キューにメッセージがあるかどうかを確認するために、実際にキューをそれを取ることなく、キューが空の場合は、MQRC_NO_MSG_AVAILABLEを取得します オプションとしてキューとIBM.WMQ.MQC.MQGMO_BROWSE_FIRSTMQC.MQOO_BROWSEを使用しています。

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を使用します。

+1

'MQINQ'を使用して、' MQIA_CURRENT_Q_DEPTH'整数属性を要求することもできます。メリットは 'MQGET'と' MQINQ'でセキュリティを違うように設定できることです。これにより、監視ユーザーはキューの属性にアクセスできますが、参照または取得することは必ずしも許可されません。 – Stavr00

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パック - ローカルQMについてはrfhUtil.exe(ローカルQM)とrfhUtilC.exe(リモートQM用)

を持っている、それはあなたが適切な値とヒットを配置する必要がまっすぐですブラウズすると、Queue Depthが表示されます。

リモートQMの場合は、キューマネージャ名とキュー名のキューにはPlace/TCP /(PortNo)を指定します。ブラウズを押すとキューの深さを知ることができます。

Unix/Ubuntu/Linux版の場合 - これに似たMQVisualEditという製品があります。

関連する問題