4

MQ サーバー (MQ .NET を使用) に数百のメッセージがあります。

私はそれらを1つずつ読み込もうとしていますが、それをループする際に問題があります。この点で使用できるカウント/長さのプロパティはありません。

mqQueue - MQQueue mqQMgr - MQ QueueManager

   mqQueue = mqQMgr.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_BROWSE);
   mqQueue.Get(mqMsg, mqGetMsgOpts); 
   string readMessage = mqMsg.ReadString(mqMsg.MessageLength);

キュー内のすべてのメッセージをループする方法と、メッセージがない場合は終了する方法を教えてください。前もって感謝します。

4

2 に答える 2

4

WMQ コードと共にインストールされたサンプル プログラムを見てください。デフォルトでは、これらはに住んでいC:\Program Files (x86)\IBM\WebSphere MQ 7.5\tools\dotnet\samples\cs\base\て、あなたが欲しいと思うのは ですSimpleGet.cs

あなたが抱えている問題は、キューを繰り返し開いていることです。これにより、行ポインターが毎回キューの先頭にリセットされます。サンプル プログラムは、キューを 1 回開き、特定の数に達するか、キューが空になるまでメッセージをループする方法を示しています。

            // create connection
            Console.Write("Connecting to queue manager.. ");
            queueManager = new MQQueueManager(queueManagerName, properties);
            Console.WriteLine("done");

            // accessing queue
            Console.Write("Accessing queue " + queueName + ".. ");
            queue = queueManager.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
            Console.WriteLine("done");

            // getting messages continuously
            for (int i = 1; i <= numberOfMsgs; i++)
            {
                // creating a message object
                message = new MQMessage();

                try
                {
                    queue.Get(message);
                    Console.WriteLine("Message " + i + " got = " + message.ReadString(message.MessageLength));
                    message.ClearMessage();
                }
                catch (MQException mqe)
                {
                    if (mqe.ReasonCode == 2033)
                    {
                        Console.WriteLine("No message available");
                        break;
                    }
                    else
                    {
                        Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
                        break;
                    }
                }
            }

コード サンプルを含む IBM インストール メディアは、SupportPac MC75としてダウンロードできます。何らかの理由でバックレベルのクライアントが必要な場合は、SupportPacs のメイン ページから入手できます。ただし、後のリリースでは多くのエンジニアリングが行われており、最新バージョンの方がはるかに優れていることに注意してください。どのバージョンの MQ クライアントでも、どのバージョンの QMgr でも動作しますが、明らかに、得られる機能は、クライアント側 (client.ini ファイルなど) またはサーバー側でのみ、そのレベルの QMgr が提供するものです。つまり、v7.0 QMgr で V7.5 クライアントを使用すると問題なく動作しますが、v7.0 QMgr には CHLAUTH ルールがないため、CHLAUTH ルールは提供されません。

于 2013-01-18T19:51:05.620 に答える
1

これは私が探していた行で、カーソルを次のメッセージに移動して、次のメッセージを読むことができるようにします。

mGetMsgOpts.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;

MQGetMessageOptions:

queue.Get(message);
Console.WriteLine("Message " + i + " got = " + message.ReadString(message.MessageLength));
mGetMsgOpts.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;
于 2013-01-25T21:11:29.410 に答える