4

我的 MQ 服务器中有数百条消息(使用 MQ .NET)。

我正在尝试一一阅读,但是我在循环播放时遇到了问题。我没有任何可以在这方面使用的计数/长度属性。

mqQueue - MQ 队列 mqQMgr - MQ 队列管理器

   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.

您遇到的问题是您重复打开队列。这会将 rowse 指针重置为每个时间的队列头部。示例程序展示了如何打开队列一次,然后循环消息直到达到特定数量或直到队列为空,以先到者为准。

            // 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 客户端可以正常工作,但它不会为您提供 CHLAUTH 规则,因为 v7.0 QMgr 没有这些规则。

于 2013-01-18T19:51:05.620 回答
1

这是我正在寻找的行,将光标移动到下一条消息,以便我可以阅读下一条消息。

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

MQGetMessage 选项:

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 回答