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

tri*_*ney 2 queue message-queue mq ibm-mq

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

Jos*_*osh 5

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

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

IBM文档列出了以下差异:

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