NServiceBus を使用して、多数のテナントのドキュメント処理を実行しています。
各テナントには独自のデータベースがあり、データ アクセスには NHibernate を使用しています。Web アプリケーションでは、IoC ツール (StructureMap) を使用してセッション管理を処理しています。基本的に、テナントごとにセッション ファクトリを維持します。からテナントを特定できますHttpContext
。
NServiceBus を使用してドキュメント処理を開始すると、テナント ID にアクセスできます。ドキュメントの処理中にこのテナント ID を使用できるようにする必要があります (2 つのサガがあり、多数のイベントを発生させます)。
テナントごとに NHibernate を作成する必要があるため、SessionFactory
StructureMapを構成するときにテナント ID を取得する何らかの方法が必要になります。
メッセージ ヘッダーを使用してテナント ID を格納することを提案している投稿をいくつか見ましたが、次の方法がわかりません。
- 最初にドキュメントを送信するときにメッセージ ヘッダーを設定する (を送信する
SubmitDocumentCommand
) - StructureMap を構成するときにヘッダーを参照します
- サガ/ハンドラー内のヘッダーにアクセスする
- ヘッダーが 1 つのメッセージから次のメッセージに流れるようにします。を送信する
SubmitDocumentCommand
と、 によって処理されますDocumentSubmissionSaga
。送信が成功すると、DocumentSubmittedEvent
. プロセスのすべての時点でテナント ID が利用可能であることを確認したいと思います。
この情報があれば、NHibernate を使用してマルチテナンシーを正常に実装できると思いますが、このシナリオに固有のものがあれば幸いです。