2014-09-25 22 views
0

我想使用事件採購和CQRS,所以我需要投影(我希望我使用適當的術語)來更新我的查詢數據庫。我如何處理數據庫錯誤?如何通過事件採購和CQRS處理投影錯誤?

例如我的一個查詢緩存數據庫不可用,但我已經更新了其他的數據庫。因此,不可用的數據庫在業務恢復時不會與其他人無關。它如何知道它必須運行事件存儲中的最後10個域事件?我想我必須存儲有關數據庫當前狀態的信息,但是如果數據庫狀態存儲失敗呢?任何想法,最佳實踐如何解決這類問題?

回答

3

在任何一種情況下,您都必須告訴您的消息傳遞總線,處理失敗,並且應該稍後重新傳遞事件,以便數據庫將在此時重新聯機。這就是爲什麼我們使用「至少一次」交付保證的消息總線系統。

對於事務性查詢數據庫,您當然也應該回滾事務。如果您的查詢數據庫不支持事務處理,則必須確保在應用程序方面更新具有冪等性 - 即,如果您的事件在下一次投遞嘗試時到達,則必須設計投影代碼和/或數據庫,使得重複處理事件不會損害數據庫的狀態。這有時很容易實現(例如,當事件導致投影中的人名改變時),但通常並不那麼平凡(例如,當投影簡單地增加視圖計數時)。但是,當你使用非事務數據庫時,這是你付出的代價。