在IBM MQ服务器中遍历消息

本文关键字:遍历 消息 服务器 IBM MQ | 更新日期: 2023-09-27 17:54:12

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

我正试图一个接一个地阅读这些,但是我在循环thro' that方面有问题。我没有任何计数/长度属性,我可以在这方面使用。

mqQueue - mqQueuemqQMgr - 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);

我如何循环通过'队列中的所有消息,如果没有消息,我想退出。

在IBM MQ服务器中遍历消息

查看与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.5客户端和v7.0 QMgr工作得很好,但是它没有给您CHLAUTH规则,因为v7.0 QMgr没有这些规则。

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

mGetMsgOpts。选项= 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;