我有一个使用 php-amqplib 的 php 守护程序,它使用来自 RabbitMQ 服务器的消息。这是它的要点(尽管它比这更复杂一些):
$callback = function (AMQPMessage $msg) {
echo "Handling event: some event name here";
try {
//some custom logic here
} catch (\Throwable $e) {
//write error in a log here
}
$msg->ack();
};
$channel = $this->connection->channel();
$channel->basic_qos(null, 1, null);
$channel->basic_consume($queue, '', false, false, false, false, $callback);
$this->wait($channel);
while ($channel->is_open()) {
$channel->wait();
}
$channel->close();
$this->connection->close();
当我在后台运行它时,它会处理事件,将输出和错误写入各种日志,我可以在 RabbitMQ 控制面板中看到队列有消费者。然后在相当长的一段时间后它停止这样做:错误和输出日志中都没有出现任何消息,RabbitMQ 控制面板显示队列有 0 个消费者,但进程仍在以某种方式运行。