2

ユーザーがアクセスできるデータのみを取得できるように、Webサイトのメッセージングシステムを保護する方法を探しています。これを念頭に置いて、サーバーがすべてのメッセージを送信するマスタートピック交換があるシステムを考えました。

Webサイトは、各ユーザーのsessionIdを保持しています。ユーザーが認証されると、sessionIdという名前の別の交換が作成されます。クライアント側のユーザーは、マスター以外のすべての交換にバインドできます。sessionIDは一意であるため、別のユーザーのsessionIDを推測してバインドし、メッセージを取得することは非常に困難です。

各メッセージには、sessionID.destinationのルーティングキーがあります。クライアント側は、すべての潜在的な宛先を知っています。

視覚化に役立てるために:

                            -> SessionID Exchange -> client
Server -> master Exchange | -> SessionID Exchange -> client
                            -> SessionID Exchange -> client

私の質問は2つあります。交換をrabbitmqの交換にバインドすることは可能ですか?また、誰かが以前にこのようなシステムをセットアップしたことがありますか?むしろ、このトピックの経験がある人は、私が使用できる実用的なシステムをすでに持っていますか?

よろしくお願いします。

4

3 に答える 3

4

はい、バインドして交換して交換することは可能です。さまざまな種類の交換を行うこともできます。channel.exchangeBind()の代わりに使用する必要がありchannel.queueBind()ます。しかし、それは同様の方法で機能します。

システムでファンアウト交換にバインドされたトピック交換があります。ファンアウト交換に送信されるメッセージと共にルーティング キーを送信するようにします。ファンアウト エクスチェンジ レベルでは効果がありませんが、トピック エクスチェンジにルーティングされると、ルーティング キーを使用して送信先のキューが決定されます。

于 2012-08-29T05:26:16.517 に答える
1

単一の交換とバインドされた複数のキューの場合、クライアントから送信されたメッセージは、交換を介して、バインディングに基づいて可能なキューに到達します。つまり、クライアントからのメッセージは、1 つのホップで交換を介して宛先キューに到達します。

バインディングに基づいて可能な宛先キューにメッセージを送信する場合を考えてみましょう。また、別の交換とそのキューバウンドにより多くのホップがかかります。そのような場合、交換バインディングへの交換が目的に適合します。

キューを Exchange にバインドするのはコストのかかるプロセスです。Exchange から Exchange へのバインドはより柔軟で、スケーラビリティに優れたソリューションです。クライアントは独自のプライベート交換を作成し、サーバーで特別な目的の交換にバインドできます。Exchange 間のバインドはパフォーマンスが向上し、スケーラビリティの問題が解決されます。

于 2013-08-09T16:22:49.523 に答える
0

私のデザインに似たものについて話しているこのブログを見つけました。まったく同じではありませんが、少なくとも可能性があることを私に知らせてくれます.

http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/

于 2012-08-29T00:39:23.467 に答える