使用 .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;
}
}
}
我已经使用 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;
}
}
}