0

私はRabbitMQを学んでおり、Facebookが友人から動的なフィードを提供するのと同じように、ユーザーに「動的メッセージ」の更新を提供するためにそれを使用することを考えました。

私のアイデアは:

  1. ユーザーが作成されるたびに、ユーザーの userId という名前のキューを作成するので、キュー名は " 100_message_queue" (userId_message_queue) にすることができます。

  2. Producer は、すべての更新をこのキューにプッシュします。

  3. クライアント側 (javascript) から " " のような REST API を呼び出し、GET http://example.com/getliveupdates/100新しい更新をすべて取得し100_message_queueて応答として送信します。

RabbitMQ php チュートリアルを読みましたが、これがどのように可能かわかりませんか? さらに、消費者は永久に実行されるため、REST リクエストを作成できないようです。それは私にタイムアウトを与えています。

この種の構造を実装する方法はありますか?

ありがとう

4

1 に答える 1

1

そのメッセージを Web クライアントに配信することを計画しているので、Web STOMP RabbitMQ プラグインを使用してMQTTSTOMPを検討することをお勧めします。あなたにとって、WebSocket を介して彼らの力を利用することは完璧な解決策になるはずです。そして、それは常にプロであり、おそらくあなたが望むものであるリアルタイムのメッセージを提供します.

実行中の永久消費者の処理については、次のとおりです。

php-amqp拡張機能を使用している場合は、read_timeoutオプションを 1 (秒) などの小さな値に設定できるため、コンシューマがキューからすべてのメッセージを取得すると、1 秒間待機します。新しいメッセージの場合はさらに例外をスローします(AMQPConnectionException、醜い解決策だと思いますが、これが今のやり方です)。

または、AMQPQueue::getメッセージがなくなるまでキューからメッセージを送信できます。

物事は同じでなければphp-amqplibなりませんが、少なくとも考え方は同じです。消費者が新しいメッセージを時間までに待機するか、キューからメッセージを繰り返し取得するように制限します。

于 2014-10-03T09:02:13.853 に答える