1

私たちのウェブサイトには約 50,000 人のユーザーがおり、毎日のアクティブなトラフィックはかなり良好です。ユーザーベース向けの新しい通知機能を設計しています。

私たちの要件は次のとおりです。

  1. ユーザーは異なるグループの一部です。
  2. ユーザーは複数のグループに所属できます。
  3. ユーザーがグループ内の画像をアップロードすると、その特定のグループのすべてのメンバーは、オンラインまたはオフラインに関係なく、「新しい画像がアップロードされました」という通知を受け取る必要があります。

グループごとにrabbitmq交換を作成し、ユーザーごとにキューを作成することを考えました。しかし、正しい方法で設計するのに混乱しました!!

たとえば、通知が生成されてから数日後にユーザーがサイトにログインしたとしても、ユーザーは通知を受け取るはずです。最終的にメッセージを DB に保存することになりましたが、これはオフライン ユーザーにとってはまったく良いことではありません。

誰かがこのユースケースの説明とともに適切な設計パターンを提案できますか? セロリ + rabbitmq + トルネードを使用しています。トルネードはセロリの消費者に直接話しかけるべきですか? ユーザーがオフラインの場合、メッセージはどこに保存されますか?

4

1 に答える 1

0

私は同様のプロジェクトを持っています。それで、それがどのように機能するか:

  • イベント ソース (django、セロリ、どこでも) からウサギ キューにメッセージを送信します。
  • pika+tornado IOLoop を使用できます (したがって、メッセージが tornado に到着すると、pika ループを介して通知を受信し、リクエストが http を受信すると、または Tornado を介した websocket 接続を受信します)。
  • ユーザーへのメッセージングに TornaodApplication Websocket で開かれたコレクションを使用する

私の github で torando+rabbitmq を介してログを記録すると、非常に近いプロジェクトを確認できます: https://github.com/rmuslimov/RapidLog

于 2012-07-15T13:18:55.083 に答える