【问题标题】:Whats the difference between using the clear command and mqget api call to clear a queue?使用 clear 命令和 mqget api 调用来清除队列有什么区别?
【发布时间】:2012-01-11 08:00:03
【问题描述】:

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

【问题讨论】:

  • 什么队列? IBM Websphere MQ 队列?

标签: queue message-queue ibm-mq mq


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    IBM 文档列出的区别如下:

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

    【讨论】:

    • 因此,您可以说 CLEAR 命令更安全,因为它不会清空正在使用的队列。
    • 有点。当队列上有 any 句柄(包括 PUT 句柄)时,CLEAR 失败。因此,如果由于消费者死亡而队列已满,并且您仍然至少连接了一个生产者,那么 clear 将失败。在这种情况下,CLEAR 并不比 GET 更安全,但它是唯一有效的方法。
    • 刚刚更新了答案以包含来自 IBM 的有关未提交消息的信息。
    猜你喜欢
    • 2011-07-22
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2017-05-19
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多