我已经使用MQI创建了一个Windows服务有没有办法向MQGet添加异步提取我已经使用Message Listener尝试了它。但是如何使用MQConn进行无需线程请查看下面的代码
while (queueGetMessageOptions.GroupStatus != QC.MQGS_LAST_MSG_IN_GROUP)
{
try
{
inboundmsg = new MQMessage();
queuerecieve.Get(inboundmsg, queueGetMessageOptions);
}
}
以上代码是否正确。我需要设置组状态吗?因为服务应该正在运行并且不断地监听队列
答案 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;
}
}
}