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



在WebSphere MQ中清除队列时,使用clear命令和mqget API调用有什么区别?

CLEAR命令发出单个命令来清除队列,而使用MQGET命令的Clearing则读取队列,直到队列为空。

实际上,可以使用MQGET进行清除,而不必获得队列上的排他锁。另一方面,如果队列正在某处使用,则CLEAR命令将失败。

IBM文档列出的差异如下:

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

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

使用Clear QL, WMQ也会丢弃队列文件并重新创建它。通常,队列文件的大小在文件空间未被使用一段时间后才会减小。

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

最新更新