我一直在阅读关于事件采购模式,如果您想重建您的系统,这可能非常有用。但是,如果我需要在处理新的传入请求时运行事件重建,该怎么办?这种情况下是否有特定的模式或最佳做法? 因此,如何确保新的传入请求不会在重播时堵塞我的系统,因为事件同步和顺序对我的系统非常重要。它涉及更新依赖于事件序列的数据库记录。有什么想法吗?事件采购 - 事件回放
回答
由于您描述的限制,听起来好像住从零重建不能成为您计划的一部分。您可以改为进行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