2017-11-09 5 views
0

私はウェブメールサーバを作成しています。私はクライアントへの新しいメール通知にウェブソケットを使用します。RabbitMQ:新しいメール通知モデル

新しい電子メールがサーバーに到着すると、その特定の用途についてすべてのWebクライアントに通知する必要があります。私。ユーザは複数のブラウザウィンドウを開くことができる。

これをrabbitmqでどのようにモデル化することができますか?

私は、リソースを効率的に聞こえない、またはファンアウト交換を1つしか持たず、すべてのクライアントがそれに接続しているので、すべてのクライアントがすべての電子メール通知を受け取りますが、右のいずれかの音。

提案がありますか?

答えて

2

ウェブメールサーバに到着したすべてのメールを購読しているすべてのクライアントに送信したいので、ファンアウトがメッセージ交換オプションとして優れていると思います。ファンアウト交換機は、メッセージをバインドされているすべてのキューにルーティングします。特定のユーザーに特定のメールを送信したい場合は、directを使用します。この設定で

direct

、我々はそれに結合された2つのキューとの直接交換Xを見ることができます。最初のキューはバインディングキーオレンジでバインドされ、2つ目のバインディングはバインディングキーが黒で、もう1つが緑でバインドされています。

このような設定では、ルーティングキーがオレンジのExchangeに公開されたメッセージはキューQ1にルーティングされます。ルーティングキーが黒または緑のメッセージはQ2に送られます。他のすべてのメッセージは破棄されます。

複数結合(ファンアウトと同じ)

multiple-binding

同じ結合キーで複数のキューをバインドするために完全に合法です。この例では、XとQ1の間にバインディングキーblackを使用してバインディングを追加できます。その場合、ダイレクト交換機はファンアウトのように動作し、一致するすべてのキューにメッセージをブロードキャストします。ルーティングキーが黒のメッセージは、Q1とQ2の両方に配信されます。

+0

だから私はユーザーIDごとに交換をしなければならないでしょうか? – 599644

+0

すべてのメールをすべて送信する必要があるため、user-idを使用する必要はありません。特定のユーザーに特定のメールを送信する場合は、戦略を変更する必要があります。 –

+0

各ユーザーのすべてのクライアントに各メールを送信します。私。私は複数のユーザーを持ち、各ユーザーには複数のクライアントがあります。私は、ユーザBのクライアントにユーザAのメッセージを通知するのは嫌いです。 – 599644

関連する問題