我在浏览队列时遇到了一个令人沮丧的问题。我知道队列需要使用打开选项中的 MQOO_BROWSE 选项打开。然后在第一次读取时使用获取消息选项 MQGMO_BROWSE_FIRST 执行 GET。最后,后续的 GET 应该使用 MQGMO_BROWSE_NEXT 选项。
问题是,我的尝试只能检索第一条消息!在第二次 GET 时,即使使用 MQGMO_BROWSE_NEXT,该方法也会抛出 MQRC_NO_MSG_AVAILABLE,即使队列中有 5 条消息!
这是我使用的代码:
IList<string> Messages = new List<string>();
_queueManager = new MQQueueManager(QueueManagerName);
int openOptions = MQC.MQOO_BROWSE // open queue for browsing
_queue = QManager.AccessQueue(QueueName, openOptions);
MQGetMessageOptions mqGetMsgOpts = new MQGetMessageOptions();
mqGetMsgOpts.Options = MQC.MQGMO_BROWSE_FIRST;
MQMessage msg = new MQMessage();
_queue.Get(msg, mqGetMsgOpts);
MQGetMessageOptions mqGetNextMsgOpts = new MQGetMessageOptions();
mqGetNextMsgOpts.Options = MQC.MQGMO_BROWSE_NEXT;
try
{
while (true)
{
string messageText = msg.ReadString(msg.MessageLength);
Messages.Add(messageText);
_queue.Get(msg, mqGetNextMsgOpts);
}
}
catch (MQException ex)
{
// Handle it
}