Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在IBM MQ服务器中的消息上循环_C#_.net_Ibm Mq - Fatal编程技术网

C# 在IBM MQ服务器中的消息上循环

C# 在IBM MQ服务器中的消息上循环,c#,.net,ibm-mq,C#,.net,Ibm Mq,我的MQ服务器中有数百条消息(使用MQ.NET) 我正试图一个接一个地阅读这些内容,但我在循环阅读时遇到了问题。我没有任何计数/长度属性可以在这方面使用 mqQueue-mqQueue mqQMgr-MQ队列管理器 mqQueue = mqQMgr.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_BROWSE); mqQueue.Get(mqMsg, mqGetMsgOpts); string readMes

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

我正试图一个接一个地阅读这些内容,但我在循环阅读时遇到了问题。我没有任何计数/长度属性可以在这方面使用

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

如何循环遍历队列中的所有消息,如果没有消息,则退出。提前感谢。

看一看使用WMQ代码安装的示例程序。默认情况下,它们将位于
C:\ProgramFiles(x86)\IBM\WebSphere MQ 7.5\tools\dotnet\samples\cs\base\
中,我认为您需要的是
SimpleGet.cs

您遇到的问题是重复打开队列。这将在eac时间重置指向队列头的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;
                    }
                }
            }
//创建连接
Console.Write(“连接到队列管理器…”);
queueManager=新的MQQueueManager(queueManagerName,属性);
控制台。写入线(“完成”);
//访问队列
Console.Write(“访问队列”+queueName+”);
queue=queueManager.AccessQueue(queueName,MQC.MQOO_INPUT_作为_Q_DEF+MQC.MQOO_FAIL_,如果_静止);
控制台。写入线(“完成”);
//不断地获取消息

对于(inti=1;i这是我要查找的行,将光标移动到下一条消息,以便我可以阅读下一条消息

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;

谢谢,numberOfMsgs的值是如何计算的?它是从命令行传入的。你有示例代码吗?你需要下载的链接吗?我需要一个接一个地获取所有消息,就像我将编写一个方法GetAllMessages()并让这些消息以其消息id逐个读取,请共享链接/快速伪代码。我不确定在不安装供应商媒体的情况下如何安装和注册.Net DLL,因此我很惊讶您还没有示例。但是,我已发布了一个到官方安装包的链接。WMQ客户端是免费下载,尽管我认为您必须注册下载。numberOfMsgs:queue.CurrentDepth的值是多少?这不清楚,我认为它不能解决问题。
mGetMsgOpts
永远不会传递给
queue.Get
方法