1

私はまだメッセージ キューの概念に取り組んでいます

別の質問があります。共通の型ライブラリ、つまり、サブスクライバーとレシーバーが送受信できるすべての型を格納するライブラリがあります。

1 つのメッセージ タイプが複数のパブリッシャーから送信される可能性がある

  1. これが機能する可能性はありますか、特に rebus で
  2. サブスクライバーは、接続するパブリッシャーをどのように知るか

読んでくれてありがとう

4

1 に答える 1

1

Rebus でこれを機能させることができます- これが推奨されるアプローチであるかどうかを言うのは難しいですが、これはうまくいくはずです:

異なる種類のすべてのパブリッシャーで同じサブスクリプション ストレージを共有する場合 (たとえば、サブスクリプションを共有 SQL Server の同じテーブルに格納することによって)、それらのいずれかにアクセスすると、いずれかによってパブリッシュされたものbus.Subscribe<TEvent>をサブスクライブすることになります。TEvent

サブスクライブするパブリッシャーをランダムに選択する場合 (または単に事前にわからない場合)、次のいずれかを実行できます。

  1. サブスクリプション ストレージを編集してすべてのサブスクリプションを手動で確立する、または

  2. 専用のサブスクリプション マネージャーとして機能するようにエンドポイントを構成します。この方法では、すべてのサブスクライバーはサブスクリプション マネージャーについて知っているだけで、すべてが必要に応じてbus.Subscribe配線されます。

これで問題が解決することを願っています...これを行う場合は、どのように機能するか教えてください:)

オプション #2 の図を次に示します。

オプション #2 の図

要約すると、その作業を行うために必要なものは次のとおりです。

  • サブスクリプション マネージャーは、サブスクリプション ストレージが構成されているエンドポイントです。
  • 各パブリッシャー (pub1、pub2、...) は、サブスクリプション マネージャーと同じサブスクリプション ストレージを使用するパブリッシャーであり、任意のイベント タイプをパブリッシュできます。
  • サブスクライバーには、すべてのメッセージ タイプをサブスクリプション マネージャーにマップするエンドポイント マッピングがあります。<add messages="AssemblyWithAllMyEvents" endpoint="subscriptionManager.input"/>

このように、シーケンスは次のようになります。

  1. 加入者 (例: sub1) が呼び出しますbus.Subscribe<MyMessage>()
  2. サブスクリプション メッセージが Rebus によってサブスクリプション マネージャーに送信されます (メッセージ タイプがサブスクリプション マネージャーにマップされているため)。
  3. サブスクリプション マネージャーは、サブスクリプション ストレージにサブスクリプションを永続化します。
  4. パブリッシャー (例: pub1) が呼び出しますbus.Publish(new MyMessage())
  5. Rebus はサブスクリプション ストレージを調べて、どのエンドポイントがサブスクライブしているかを確認しますMyMessage
  6. Rebus はこれらのエンドポイントをループし、MyMessageインスタンスを sub1 に送信します。

IOW 必須ではないものは次のとおりです。

  • サブスクライバーは、メッセージ タイプをパブリッシャーにマップする必要はありません。
  • サブスクリプション マネージャーとパブリッシャーは、エンドポイント マッピングをまったく必要としません。
于 2014-07-28T09:57:05.533 に答える