我們使用NServiceBus爲多個租戶執行文檔處理。NServiceBus,NHibernate和Multitenancy
每個租戶都有自己的數據庫,我們使用NHibernate進行數據訪問。在Web應用程序中,我們使用我們的IoC工具(StructureMap)來處理會話管理。基本上我們爲每個租戶維護一個會話工廠。我們能夠從HttpContext
中識別租戶。
當我們啓動使用NServiceBus的文檔處理時,我們可以訪問租戶標識符。我們需要這個租戶ID在整個文檔處理過程中可用(我們有2個傳說並且關閉了一些事件)。
我們需要爲每個租戶創建一個NHibernate SessionFactory
,因此當我們配置StructureMap時需要某種方式來獲得租戶ID。
我見過幾個職位建議使用郵件標題來存儲租戶標識符但我不確定如何:
- 設置郵件頭,當我們第一次提交的文件(發送
SubmitDocumentCommand
) - 參考,當我們配置我們的傳奇/處理器
- 內StructureMap
- 訪問頭確保頭從一個消息流到下一個標題。當我們發送
SubmitDocumentCommand
時,它由DocumentSubmissionSaga
處理。如果提交成功,我們將發送DocumentSubmittedEvent
。我們希望確保租戶ID在此過程中的所有點都可用。
我相信有了這些信息,我可以用NHibernate成功地實現多租戶,但任何更具體的這種情況下,將不勝感激。
這幫助了很多。一旦我們有了TenantId,我們就可以配置StructureMap來獲得相關的'SessionFactory'來處理這個調用。 –