在 WebSphere MQ 中清除队列时,使用 clear 命令和 mqget API 调用有什么区别?
问问题
5795 次
2 回答
5
CLEAR 命令发出一个清除队列的命令,而使用 MQGET 命令清除会读取队列直到它为空。
实际上,可以使用 MQGET 清除,而无需获取队列上的排他锁。另一方面,如果队列正在某处使用,CLEAR 命令将失败。
IBM 文档列出的区别如下:
- 如果您使用 CLEAR 命令,则所有消息都会从队列中清除。但是,如果队列已经被另一个应用程序以独占方式打开,或者如果队列包含未提交的消息,则命令会立即失败并且不会清除任何消息。
- 如果您使用 MQGET API 调用,则从队列中获取消息,直到没有更多消息可用为止。但是,MQGET 不识别未提交的消息,这意味着队列上可能仍有未提交的消息。此外,如果队列已被另一个应用程序独占打开,则该命令可能会失败。
于 2011-12-02T14:24:31.900 回答
1
我刚刚验证了 CLEAR 命令还将队列文件的大小减小到任何空队列的大小。
使用 Clear QL,WMQ 也会丢弃队列文件并重新创建它。通常,队列文件的大小在文件空间未使用一段时间之后才会减小。
我记得当我们有一个队列填满磁盘时必须这样做。我们没有处理消息,而是清除了队列以同时释放磁盘空间。
于 2011-12-02T15:55:51.073 回答