AMQPQueue :: consumeメソッドは、PHP AMQPライブラリ(http://www.php.net/manual/en/amqpqueue.consume.php)のバージョン1.0以降のbasic.consumeの「適切な」実装になりました。 )。残念ながら、PHPは単一のスレッド言語なので、同じプロセス空間でメッセージを待つ間は他のことはできません。 AMQPQueue :: consumeをコールしてコールバックを渡すと、アプリケーション全体がブロックされ、ブローカによって次のメッセージが送信されるのを待っています。その時点で、指定されたコールバック関数が呼び出されます。ノンブロッキングメソッドを使用するには、AMQPQueue :: get(http://www.php.net/manual/en/amqpqueue.get.php)を使用する必要があります。これは、サーバーをポーリングしてメッセージを返します。ブール値。メッセージがない場合はFALSE。
私はscvatexの提案に、この問題に対する「プッシュ」アプローチを使用するために別の言語を使用することに同意していません。 PHPはIO駆動ではないため、メッセージが到着したときに別の言語を使用してPHPスクリプトを呼び出すと、複雑さが増しているように見えます。なぜなら、AMQPQueue :: consumeを使用してプロセスブロック(メッセージ待ち)コールバック内のロジックを使用するか、コールバックを別のPHPスクリプトで実行します。
大規模なジョブ処理システムとしての私の作業では後者を行いました。エラーを分離し、子プロセスで親ジョブプロセッサを実行し続けることができます。これをどのように設定し、いくつかのコードサンプルを詳しく説明したいのであれば、私はそれらを投稿して嬉しいです。
ライブラリの実装方法は異なります。彼らのほとんどはbasic.consumeをサポートしています。あなたのPHPライブラリがない場合は、独自のを書く必要があります。例えば、あなたは、ブローカーからのメッセージを消費するpythonスクリプトまたはjavaプログラムによってPHPスクリプトを動かすことができます。 – scvalex
Python/Javaクライアントはポーリングする必要はありませんが、ブローカへの安定した接続が必要です。ブローカーはメッセージをP/Jクライアントにプッシュします。クライアントは、メッセージごとにスクリプトを呼び出すことができます。詳細は、RabbitMQのチュートリアルを参照してください。http://www.rabbitmq.com/getstarted.html – scvalex
私はPHPに関する経験がなく、PHP AMQPクライアントについては何も知らないです。私がPHPライブラリについて語ったことは、教育を受けた推測にすぎません。私は本当にここであなたの質問に答えていない。今後、RabbitMQ Discussメーリングリストにこのような質問を投稿したいと思うかもしれません。私はSOをチェックする唯一のRabbitMQ開発者だと思う。メーリングリストに掲載されている質問に答えることができます。 – scvalex