gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:32:06 32 4
gpt4 key购买 nike

我有一个抽象 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com