如何避免MQRC2033 NO_MSG_AVAILABLE

时间:2011-06-25 17:06:04

标签: ibm-mq

我有一个简单的程序来处理来自队列的消息。 我的目的是处理队列中的所有可用消息,并仍然侦听队列中的传入消息。

我已将处理部分写入无限循环中,因为我希望它始终监听队列并处理消息。

在再次处理完所有消息后,它会尝试从队列中获取一条消息(因为它在无限循环内)并且

没有消息它会抛出MQRC 2033 NO_MSG_AVAILABLE异常(事实上它是正确的)并且我的程序退出。

有人可以提出不断收听此队列的想法并避免此异常。

1 个答案:

答案 0 :(得分:6)

当您执行MQGET API调用时,可以选择让程序等待消息。您可以指定等待时间(以毫秒为单位)或指定永久等待。只要确保如果您的应用程序等待超过几秒钟,请指定“如果静止失败”。这允许队列管理器干净地停止。如果没有“如果静止失败”,管理员将需要发出抢先关闭,这可能会导致问题。

Waiting for Messages章节的程序员指南中有专门针对此问题的部分。根据您所使用的语言,要指定的实际值位于Programmer's ReferenceUsing Java手册或Using .Net手册中。单击上面的链接时,每个都将在导航面板中显示。