2012-01-24 11 views
5

MassTransitのpub/subプロジェクトのサンプルを読んだ後、私は頭を傷つけてしまいました。MassTransitのPubSubの例

サンプルでは、​​クライアントアプリケーションは、架空のユーザーのパスワードを更新するためのサブスクライバアプリケーションの要求を公開しています。このサンプルコードは正常に動作し、このプロジェクトのバウンスボールに従うのは簡単です。実際の環境で

HOWEVER--

、(私の理解では)パブリッシュ/サブスクライブの目的は、多数の加入者との対話の出版社の数が少ないことです。任意の種類のCRUD操作を実行する加入者の場合、通信パターンは複数の加入者がメッセージを処理することを妨げるべきではないか? 20人の加入者が同じデータベースレコードを更新しようとするのは望ましいことではありません。

これは誤ったサンプルプロジェクトのケースですか?

pub/subをCRUD操作に使用できる場合、1人のサブスクライバが操作を実行できるようにフレームワークを構成するにはどうすればよいですか?

私はパブ/サブの目的に関するいくつかの基本情報を完全に欠落していますか?提供される任意の明確化のため

おかげで...

デビッド

答えて

4

あなたが参照するシナリオは、通常、「競合する消費者」と呼ばれ、パブリッシュ/サブスクライブのかなり典型的です。

それぞれのコンシューマに固有のキュー名がある場合、各コンシューマはそれ自身のメッセージのコピーを受信します。

また、消費者は同じキュー名を共有している場合、消費者の行動を競合得るために、各メッセージ(ので、各メッセージは一度だけ受信されます)

+2

ありがとうございました。これまでの私の問題の90%は正しい用語を知らないことから来ています。 –

2

のための消費者間の競争があるでしょうあなたは、nを持つことができます何人かのパブリッシャーから任意のパブ/サブシステムのサブスクライバーに、これは、実際には、特定のメッセージに応答するアクターの数です。

サンプルプロジェクトは最高ではないかもしれませんが、何が起こっているのかがわかります。しかし実際のケースでは、CRUD型の振る舞いに使用できます。しかし、それは同じデータの応答を要求するミドルウェア(キャッシュ)に "ロードデータ"タイプのメッセージを送る多くのフロントエンドのラインに沿っている。そのデータが何らかの形でフロントエンドで更新されると、複数のミドルウェア部分を更新する必要があることを示すメッセージ(キャッシュ、バックエンドストアなど)を公開する必要があります。 [CQRS]

一般的なメッセージングは​​、切断されたシステムでの作業です。あなたの特定の世界は、消費者と出版社の構造に関するものです。私はMassTransitの実装を見てきましたが、スタティックではなく、実際にはpub/subではなく、システムの既知のトポグラフィに沿った多くのセンドだけでした。概念を本当に理解して、私が知っている最高の本はEnterprise Service Bus: Theory in Practiceです。

こちらがお役に立てば幸いです。

編集:documentationもご覧ください。いくつかのコンセプトがそこに触れられています。

+0

ありがとうトラヴィス。私が達成しようとしているのは、あなたの「システムの既知の地形」のステートメントのラインに沿ったものだと思います。 –

関連する問題