php - RabbitMQ - 如何检查队列是否为空?

标签 php rabbitmq php-amqplib

我有一个抽象 RabbitMQ 服务器的 Web 服务接口(interface)(不要问我为什么,我知道这是不必要的步骤,但我必须这样做)。也就是说,我通过 Web 服务调用而不是直接通过 amqp 从队列中轮询消息。 .

通过basic.consumer消费阻塞执行线程,直到队列中有消息。这使得 Web 服务不会返回。

说明代码:

    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();

    $channel->queue_declare(QUEUE_NAME, false, true, false, false);
    $ret = array('body' => '');

    $callback = function($msg) use ($channel, &$ret) {
        $ret['body'] = $msg->body;
        /*
        Here I would basic.cancel the consumer if there were no messages in the queue
        */
    };

    $channel->basic_consume(QUEUE_NAME, 'tag', false, true, false, false, $callback);

    if (count($channel->callbacks)) {
        $channel->wait(); // blocks here...
    }

    return $ret;

最佳答案

如果要获取队列大小,可以调用queue_declare对于 php-amqlib,return 的第二个参数是队列中的消息数。

  list($queue, $messageCount, $consumerCount) = $channel->queue_declare(QUEUE_NAME, true);

调用 queue_declare() 方法时,将 $passive 参数设置为 true 很重要

关于php - RabbitMQ - 如何检查队列是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460212/

相关文章:

php - 两次获取相同的列,不同的值

performance - 如何使用 RabbitMQ http api 查看哪个队列有消息处于就绪状态

c# - 使用CAP时如何设置RabbitMQ队列前缀

java - 涉及rabbitmq的集成测试

PHP RabbitMQ setTimeout 或其他停止等待队列的选项

php - Laravel 在 Eloquent ORM 中使用 WHERE

java - HTTPEntity 给出空值

php - 用 php-amqplib 和 RabbitMQ 写死字?

php - 与 RabbitMQ 的主题交换歧义

php - 使用 mysql_query() 获取位字段