1

NServiceBus を使用して、多数のテナントのドキュメント処理を実行しています。

各テナントには独自のデータベースがあり、データ アクセスには NHibernate を使用しています。Web アプリケーションでは、IoC ツール (StructureMap) を使用してセッション管理を処理しています。基本的に、テナントごとにセッション ファクトリを維持します。からテナントを特定できますHttpContext

NServiceBus を使用してドキュメント処理を開始すると、テナント ID にアクセスできます。ドキュメントの処理中にこのテナント ID を使用できるようにする必要があります (2 つのサガがあり、多数のイベントを発生させます)。

テナントごとに NHibernate を作成する必要があるため、SessionFactoryStructureMapを構成するときにテナント ID を取得する何らかの方法が必要になります。

メッセージ ヘッダーを使用してテナント ID を格納することを提案している投稿をいくつか見ましたが、次の方法がわかりません。

  1. 最初にドキュメントを送信するときにメッセージ ヘッダーを設定する (を送信するSubmitDocumentCommand)
  2. StructureMap を構成するときにヘッダーを参照します
  3. サガ/ハンドラー内のヘッダーにアクセスする
  4. ヘッダーが 1 つのメッセージから次のメッセージに流れるようにします。を送信するSubmitDocumentCommandと、 によって処理されますDocumentSubmissionSaga。送信が成功すると、DocumentSubmittedEvent. プロセスのすべての時点でテナント ID が利用可能であることを確認したいと思います。

この情報があれば、NHibernate を使用してマルチテナンシーを正常に実装できると思いますが、このシナリオに固有のものがあれば幸いです。

4

1 に答える 1