根据 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();
所以问题是我如何检查另一个消费者是否已经在运行?