我一直在閱讀關於事件採購模式,如果您想重建您的系統,這可能非常有用。但是,如果我需要在處理新的傳入請求時運行事件重建,該怎麼辦?這種情況下是否有特定的模式或最佳做法? 因此,如何確保新的傳入請求不會在重播時堵塞我的系統,因爲事件同步和順序對我的系統非常重要。它涉及更新依賴於事件序列的數據庫記錄。有什麼想法嗎?事件採購 - 事件回放
回答
由於您描述的限制,聽起來好像住從零重建不能成爲您計劃的一部分。您可以改爲進行A/B設置,在當時處於脫機狀態的新系統上播放事件,然後在新系統啓動後切換到新系統。關鍵是舊系統和新系統可以同時調諧到事件流。
如果您訂購了不同系統的事件子集,可能只需要爲其中一個子系統重播事件,並且在沒有該子系統的情況下仍然可以滿足您的同步/順序需求。
您可以通過在數據中包含事件序列號並且如果還沒有看到該事件,並具有依賴序列的服務延遲處理,可以防止作用於過時的信息。
爲了將您的事件投影到讀取模型中,您需要使用某種類型的追趕訂閱,例如EventStore提供的訂閱。在這種情況下,您的新活動將被保存到商店,但不會立即投影。
但是,您必須認識到,您的用戶將開始查看大量過時的數據,並根據不一致的讀取模型進行操作。我寧願避免這種情況,讓系統重建。
我同意第一個答案,您可能希望與更新舊版本並行並在某個時間點進行切換並行建立新的讀取模型,可能並非所有用戶都優先。
如果可能,我們不希望將第三方庫用於事件重播。 – Nyamnyam
EventStore不是圖書館http://www.geteventstore.com –
我在類似的情況下使用了CQRS + ES。 我使用準備好的數據創建了投影,我只能更新,但不能重建。 而且在每一個查詢中,我都從這個快速構建了結果信息。
如果您需要執行一些較長的操作(如db中的更新),請使用sagas。在事件結束後生成事件 - >傳奇 - >更新投影並生成事件2。
當然,事件收入和投影更新之間會有一些延遲。
瞭解更多關於您的系統以及這種變體是否足夠適合您是非常有趣的。
- 1. 事件採購
- 2. 事件採購鏈接事件
- 3. Akka(JVM)Azure事件採購?
- 4. 事件採購:事件的多個集合
- 5. 持久化事件時的身份證複製(事件採購)
- 6. 使用事件採購時存儲事件
- 7. 事件採購和事件/彙總版本
- 8. 域事件因果關係與事件採購和CQRS
- 9. 事件採購:忽略事件的正確方法
- 10. 事件採購和驗證上寫
- 11. 事件採購,最終一致,CQRS
- 12. 流版本在事件採購
- 13. 事件採購多方面寫?
- 14. DDD - 事件採購與樹形結構
- 15. 事件採購有副作用的
- 16. CQRS /事件採購項目結構
- 17. CQRS,事件採購和NoSQL數據庫
- 18. CQRS +沒有DDD的事件採購
- 19. 事件採購和字典對象
- 20. 事件採購:何處放置業務邏輯
- 21. 事件採購和傳奇 - 補償事務
- 22. symfony的表單事件認購$事件 - >的getData()返回NULL
- 23. 事件源聚合根可以訪問事件採購存儲庫嗎?
- 24. 事件採購:在更新模型之前或之後編寫事件
- 25. 訂購jQuery事件
- 26. 對事件採取行動
- 27. 拖放事件
- 28. 無服務器與事件採購相結合可能嗎?
- 29. 具有CQRS和事件採購的SO風格信譽系統
- 30. 可以在事件採購中創建大型活動嗎?
這似乎是一個非常類似的問題我的http://stackoverflow.com/questions/38197712/event-sourcing-avoid-projects-duplicated-events-while-replaying-events-and-list – martinezdelariva