使用 .Net 的 IBM MQ 异步获取

IBM MQ Asynchronous fetch using .Net

我已经使用 MQI 创建了一个 windows 服务 有没有一种方法可以将异步提取添加到 MQGet 我已经尝试使用 Message Listener.But 如何使用 MQConn 进行操作而不使用线程 请在下面找到代码

         while (queueGetMessageOptions.GroupStatus != QC.MQGS_LAST_MSG_IN_GROUP)
        {
            try
            {                   
                inboundmsg = new MQMessage();                  
                queuerecieve.Get(inboundmsg, queueGetMessageOptions);
            }
       }

以上代码是否正确。我需要设置群组状态吗?因为服务应该是 运行 并且连续监听队列

您的问题和代码不匹配。发件人是否将消息分组?因为您的代码恰好在寻找一组消息,所以它退出了循环。

如果您想循环阅读所有消息(无组),那么您应该这样做:

MQMessage           mqMsg;
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.WaitInterval = 15000;  // wait for up to 15 seconds
gmo.Options |= MQC.MQGMO_WAIT;

bool isContinue = true;
while (isContinue)
{
   mqMsg = new MQMessage();
   try
   {
      mqQueue.Get( mqMsg, gmo );
      if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)
      {
         System.Console.WriteLine(  mqMsg.ReadString(mqMsg.MessageLength) );
      }
      else
      {
         System.Console.WriteLine( "Non-text message" );
      }
   }
   catch (MQException mqe)
   {
      // report reason, if any
      if ( mqe.Reason == MQC.MQRC_NO_MSG_AVAILABLE )
      {
         System.Console.WriteLine( "no more messages - go loop again" );
      }
      else
      {
         System.Console.WriteLine( "MQQueue::Get ended with " + mqe.Message );

         isContinue = false;
      }
   }
}