2

Rebus は A 地点から B 地点にメッセージを完全に転送できることを理解しています (トランスポート層として MSMQ を使用)。完全に明確にするために、Rebus は 1 対多のメッセージングも行うことができますか? つまり、ポイント A から送信されたメッセージはポイント B と C の両方で終了する必要がありますか?

また、可能であれば、どのように行うのでしょうか? 集中配布サイト (郵便局) が見えないので、通信はすべてのエンドポイントから他のすべてのエンドポイントへのチャネルで構成されていると想定しています (そのため、プロセスが他の 5 つのエンドポイントと通信する必要があるネットワークでは、このプロセスから 5 つのチャネルが放射されます)。この仮定を確認できますか?

4

1 に答える 1

3

はい、Rebusは実際に事実上任意の数のサブスクライバーにメッセージを公開することができます。MSMQ(少なくとも最も基本的な操作モード)が単純なポイントツーポイントチャネルであることは事実です。そのため、真のpub/subを実装するために最上位にレイヤーがあります。

それが機能する方法は、各サブスクライバーがパブリッシャーを指すエンドポイントマッピングを持ち、次に各サブスクライバーが移動することです。

bus.Subsribe<SomethingInterestingHappened>();

これにより、内部SubscriptionMessageが発行者に送信されます。次に、発行者は、通常はこの情報をSQL Serverに保存することにより、指定された各メッセージタイプを誰がサブスクライブしたかを覚えておく必要があります。これはすべて自動的に行われ、何らかのサブスクリプションストレージを構成する必要があります。

そして、何かを出版する時が来たら、出版社は行きます

bus.Publish(new SomethingInterestingHappened { ... });

これにより、Rebusは指定されたメッセージタイプのすべてのサブスクライバーを検索します。これは0、1、またはそれ以上の場合があり、イベントは各サブスクライバーの入力キューに送信されます。

これらの詳細については、ルーティングに関するページのRebusドキュメントを参照してください。

サブスクライバーとパブリッシャーがどのように構成されているかについてのヒントを与えるために、これをチェックしてください-これはサブスクライバーです:

Configure.With(...)
    .Transport(t => t.UseMsmq....)
    .MessageOwnership(t => t.FromRebusConfigurationSection())
    (...)

これには、一連のイベントを特定のパブリッシャーにマップするエンドポイントマッピングもあります。

<endpoints>
    <add messages="SomePublisher.Messages" endpoint="publisher_input_queue" />
</endpoint>

すると、発行元は次のようになります。

Configure.With(...)
    .Transport(t => t.UseMsmq....)
    .Subscriptions(s => s.StoreInSqlServer(theConnectionString, "subscriptions")
                         .EnsureTableIsCreated())
    (...)
于 2012-10-02T19:29:01.337 に答える