2015-10-14 92 views
0

在CQRS中,如何確保命令處理程序正在更新寫入存儲和事務性讀取存儲?在CQRS中如何使用NServiceBus更新命令和查詢存儲

我不確定這兩個步驟是否支持交易? 或者您是否依賴最終的一致性?讀取存儲的含義將最終更新?

什麼是(或一個)使用NServiceBus 5或6做到這一點的常見方法?

在我們的應用程序中,我們有IRepository<T>(Add,Update)用於命令端更新Sql Server數據庫。 查詢方很簡單。實體框架DbContext之上的數據庫和外觀。

在命令側的步驟是:

  1. MVC控制器從查看接收數據
  2. 控制器動作創建一個命令/消息對象,並將其發送到總線。
  3. 正確的命令處理程序創建適當的域對象並對其進行驗證。
  4. 如果有效,使用IRepository來插入或更新數據庫。
  5. 現在呢?

這是否必須是NServiceBus中的佐賀,其中第1步和第2步更新命令存儲和讀取存儲?

謝謝。

回答

0

我看到的流程如下:

  • 控制器接收一個動作,並在命令總線發出命令
  • 正確的命令處理程序被炒魷魚和寫模式得到更新
  • 命令處理程序,
  • 適當的事件處理程序被觸發的事件被觸發,讀取模型得到更新

因此更新讀取的模型在事件處理程序中完成 - 因此最終的一致性

希望這有助於!祝你好運!

+0

但如果出現問題怎麼辦,例如讀取的存儲無法更新,或命令存儲無法更新。這兩種操作不應該在某種交易中嗎?謝謝你的幫助。 – John

+0

這就是爲什麼它被稱爲最終一致性。如果在更新讀取數據的事件處理程序中出現問題,您可以隨時標記它出錯並重試執行。 (因爲你有非常精細的事件處理程序,所以你不需要做2次) –

+0

好的。因此,「標誌」意味着我將引發將在MVC應用程序中處理的另一個事件(例如SyncFailedEvent),例如通知用戶該錯誤?這也通過NServiceBus? – John

相關問題