RabbitMQ サーバーからのメッセージを消費する php-amqplib を使用する php デーモンがあります。要点は次のとおりです (ただし、それよりも少し複雑です)。
$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 であることが示されますが、プロセスは何らかの形でまだ実行されています。