使用clear命令和mqget api调用清除队列有什么区别?

时间:2011-12-02 08:49:39

标签: queue message-queue ibm-mq mq

清除WebSphere MQ中的队列时,使用clear命令和mqget API调用之间的区别是什么?

2 个答案:

答案 0 :(得分:5)

CLEAR命令发出一个清除队列的命令,而使用MQGET命令清除时会读取队列,直到它为空。

实际上,可以使用MQGET清除而无需获取队列上的独占锁。另一方面,如果队列在某处使用,则CLEAR命令将失败。

IBM文档列出了如下差异:

  • 如果使用CLEAR命令,则会从队列中清除所有消息。但是,如果队列已由另一个应用程序专门打开,或者队列中包含未提交的消息,则该命令会立即失败,并且不会清除任何消息。
  • 如果使用MQGET API调用,则会从队列中获取消息,直到没有更多消息可用。但是,MQGET无法识别未提交的消息,这意味着队列中仍可能存在未提交的消息。此外,如果队列已由另一个应用程序独占打开,则该命令可能会失败。

答案 1 :(得分:1)

我刚刚验证了CLEAR命令还将队列文件的大小减少回任何空队列的大小。

使用Clear QL,WMQ也会丢弃队列文件并重新创建它。通常,队列文件的大小不会减少,直到文件空间的某个时间间隔未被使用。

我记得当我们有一个队列填满磁盘时必须这样做。而不是处理消息,我们清除队列以同时释放磁盘空间。