PHP Rabbitmq 如何检查消费者是否正在运行?

问题描述 投票:0回答:0

根据 Rabbitmq 文档,我编写了一个用于消费队列的脚本。但它是非常基本的例子。该脚本将作为 cron 运行,因为我需要确保如果以前的消费者失败,它会恢复消费过程。脚本应该检查是否有其他消费者已经在运行,如果有另一个消费者,然后返回并且不启动新的消费者。

我发现的唯一方法是检查

queue_declare()
调用的结果,它返回带有数字的数组。脚本看起来像:

    ini_set('max_execution_time', 0);
    $queue_info = $this->channel->queue_declare($queue_name, false, true, false, false);

    // This is the problem. Is there a better solution?
    if( $queue_info[2] > 0 ) {
        Debugger::log('There is another consumer already running.');
        $this->connection->close();
        $this->channel->close();
        return;
    }

    $callback = function (AMQPMessage $msg) use ($data) {
        Debugger::log($msg->getBody());
    };

    $this->channel->basic_consume($queue_name, '', false, true, false, false, $callback);

    while ($this->channel->is_consuming()) {
        $this->channel->wait();
    }

    $this->connection->close();
    $this->channel->close();

所以问题是我如何检查另一个消费者是否已经在运行?

php rabbitmq message-queue consumer
© www.soinside.com 2019 - 2024. All rights reserved.