2016-04-19 2 views
1

1つの発行者が複数の購読者を持つシステムがあります。しかし、一部のメッセージは単一のサブスクライバだけが処理する必要があります。私の場合、パブリッシャーはデータベース内のデータの変更に関するメッセージを送信しますが、すべてのサブスクライバーは同じデータベースにアクセスできますが、すべて同じデータを変更する必要はありません。 これはどのようにrebusを使って達成できますか?Rebus subscriber-publisherシステム。単一の購読者だけがメッセージを処理します

PS。言及を忘れてしまった。購読者はいつでもオンライン/オフラインに行くことができるので、1人の加入者だけがメッセージを購読することはできません。

答えて

0

しかし、いくつかのメッセージが次にあなたがその特定のメッセージタイプのbus.Publishを使用してはならない

のみ単一の加入者によって処理されなければならない - ある特定の受信者にメッセージを送信する仕組みがありますあなたが使うべき - あなたはそれを行うべきである -

  1. メッセージのマッピングt

    Configure.With(...) 
        .(...) 
        .Routing(r => { 
         r.TypeBased() 
          .Map<YourMessage>("the_recipient"); 
        }) 
        .Start(); 
    

    は、このように誰でもがキューからそのメッセージを取得することをREBUSを伝える:あなたはこのように(1)を行う代わりに、「出版」それ

のメッセージを「送信」

  • エンドポイントにYPE the_recipientは、タイプYourMessageのメッセージの所有者であり、そのタイプの暗黙的にルーティングされたメッセージの自然な受信者と見なす必要があります。

    あなたはこのように(2)を実行します。

    await bus.Send(new YourMessage(...)); 
    

    、その後REBUSは、メッセージの自然の所有者にメッセージを送信します。

    私はそれがあなたのためのトリックを行います願っています:)

  • +0

    は '' 'the_recipient'''キュー名は、すべての「加入者」で使用することができますか? – zabulus

    +0

    あなたの加入者が異なっていて、各加入者が公開されたメッセージのコピーを受け取ることを希望します。つまり、各サブスクライバには独自の入力キューが必要です。 – mookid8000

    関連する問題