事件溯源被认为是一种复杂的模式。事实上,事件源是一个相当实用和直接的概念。它有助于建立更贴近业务的可预测的应用程序。如今,存储很便宜,而信息是无价的。在事件源中,没有数据会丢失。
本工具包目的是为参与者建立关于一般概念及其相关模式的知识。获得的知识将允许有意识地设计架构解决方案和分析相关风险。
重点将放在对架构的务实理解上,并在实践中使用Marten和EventStoreDB来应用它。
- 事件驱动架构的介绍。与经典方法的区别是基础和术语(事件、事件流、命令、查询)。
- 什么是事件源,它与事件流有什么不同。优点和缺点。
- 写入模型,来自Marten和EventStoreDB的例子的数据一致性保证。
- 处理业务逻辑的各种方法。聚合、命令处理程序、功能方法。
- 在Marten和EventStoreDB的例子中,从事件中建立读取模型的预测、最佳实践和关注点。
- 事件源和EDA中的挑战:可交付性保证、事件处理的顺序、空闲性等。
- Saga, Choreography, Process Manager, 分布式进程的实践。
- 应用架构中的事件源,与其他方法(CQRS、微服务、消息传递等)的整合。
- 事件建模中的好的和坏的做法。
- 生产中的事件源,演变,事件的模式版本等。
练习01、事件建模
具有以下购物车流程:
- 客户只有在打开产品后才能将产品添加到购物车中。
- 在选择产品并将其添加到购物篮时,客户需要提供选择的数量。产品价格由系统根据当前价目表计算得出。
- 客户可以从购物车中移除具有给定价格的产品。
- 客户可以确认购物车并开始订单履行流程。
- 客户也可以取消购物车并拒绝所有选择的产品。
- 购物车确认或取消后,该产品将无法再从购物车中添加或移除。
练习 02 - 从事件中获取当前实体状态
具有定义的事件结构和表示上一个练习中的购物车的实体,填充一个getShoppingCart将从事件重建当前状态的函数。
如果需要,您可以修改事件或实体结构。
有两种变体:
- 使用可变实体:Mutable/GettingStateFromEventsTests.java,
- 使用完全不可变的结构:Immutable/GettingStateFromEventsTests.java。
提醒:在事件溯源中,我们通过按出现顺序应用事件数据来重建当前状态
信息登记表