2016-05-29 9 views
3

私はサッカーの試合についてのリアルタイムアップデートを受信するウェブサイトを構築しています。私はRabbitMQを使ってクライアント(JSウェブサイトとAndroid/iOSアプリ)にアップデートを送信しています。AMQP/RabbitMQ - リアルタイムメッセージ/パススルーキューのみ

クライアントはリアルタイム更新のみを受信する必要があります。つまり、クライアントは、ユーザーがログインしたときにのみ更新を受け取る必要があります。履歴は保持されません。この動作を達成するために

、私は次のようなアーキテクチャを考えていた:

  • のRabbitMQでファンアウト交換。
  • 各ユーザには専用のキューがあり、専用のキューがExchangeにバインドされています。このキューは、ユーザーアカウントの作成時に作成されます。
  • これらのキューでは、値0のキュープロパティx-message-ttlが設定されます。下記参照。
  • ユーザーがログインすると、クライアントは対応するユーザーのキューを消費します。
  • メッセージは、バックエンドによってExchangeに送信され、すべてのキューに転送されます。ユーザーがログインしていない場合はx-message-ttlは0

に設定されているように、メッセージは、すぐに破棄されます、これはリアルタイム通知を達成するために、AMQP/RabbitMQのの正しい使い方ですか?

答えて

2

はい、いいえ - あなたの施設の一部が間違っています。

  • In other words, a client should only receive updates when the user is logged in.ユーザーがログインしていない場合は、RMQへの接続を削除するだけです。
  • Each user has a dedicated queue, which is bound to the exchange. This queue is created when the user account is created.キューは、RMQへの接続が確立された後で作成する必要があります。この方法では、When a user is not logged in, the message will be discarded immediately部分もカバーします。
  • TTLを0に設定する必要はありません。
  • Messages are sent to the exchange by the backend, and forwarded to all queuesわかりやすく、交換からキューに転送するのはRabbitMQです。
+0

ログイン後にキューが作成された場合、キューは「自動デリバティブ」として宣言されるべきですか? –

+0

ログインすると、あなたのウェブサイトにログインしているかログインしていることを意味しますか?RMQへの接続を確立していますか?ログアウトしている間に(Webサイト/ Webアプリケーションから)メッセージを見逃してしまわないようにするには、自動的に削除するようにしてください。 – cantSleepNow

+0

ありがとうございました。キューは作成中/削除中であることは理解できませんでした。私は、キューは多かれ少なかれ静的であるべきだと思った。私はそれを試してみる。 –

関連する問題