IBM MQ使用.Net进行异步提取

时间:2015-05-13 18:19:18

标签: .net asynchronous ibm-mq mq

我已经使用MQI创建了一个Windows服务有没有办法向MQGet添加异步提取我已经使用Message Listener尝试了它。但是如何使用MQConn进行无需线程请查看下面的代码

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

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

1 个答案:

答案 0 :(得分:2)

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

如果你想在循环中阅读所有消息(没有组),那么你应该做类似的事情:

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;
      }
   }
}