CakePHP フレームワークで構築されたフロントエンドと Java ベースのバックエンドで構成されるシステムを開発しています。この 2 つのエコシステム間の通信は、JSON メッセージを CakePHP コントローラーから RabbitMQ ブローカーに送信することによって実行されます。メッセージが消費されると、結果がフロントエンドに送り返されます。ここで、メッセージを消費し、結果をコントローラーからユーザーのブラウザーにプッシュする必要があります。PHP の部分では phpamqplib を使用していますが、新しいメッセージをリッスンするときに無限ループが必要です。
$channel->basic_consume('AMQP.COMMAND.OUTPUT.QUEUE',
'consumer',
false,
false,
false,
false,
array($this, 'processMessage'));
function shutdown($ch, $conn){
$ch->close();
$conn->close();
}
register_shutdown_function('shutdown', $channel, $conn);
while (count($channel->callbacks)) {
$read = array($conn->getSocket()); // add here other sockets that you need to attend
$write = null;
$except = null;
if (false === ($num_changed_streams = stream_select($read, $write, $except, 60))) {
/* Error handling */
} elseif ($num_changed_streams > 0) {
$channel->wait();
}
}
私のコントローラーでは、最大実行時間が 30 秒を超えているため、これにより Apache サーバーがエラーをスローします。ここで本当に助けが必要です。新しいメッセージをリッスンし、結果をビューにプッシュするための最良のソリューションは何ですか?
ありがとう
乾杯。