【问题标题】:Does this diagram follows Microservices, DDD with Event sourcing此图是否遵循微服务、带有事件溯源的 DDD
【发布时间】:2020-07-21 23:57:17
【问题描述】:
- 事件溯源是否应该在流程结束时,是否应该有事件处理程序?
- 在跟踪事件溯源时,我知道在任何时候我们都可以从事件中获取应用程序状态,但我们是否也应该将该状态保存在数据库中?
【问题讨论】:
标签:
domain-driven-design
microservices
event-sourcing
【解决方案1】:
您似乎想使用 CQRS + 事件溯源模式。
这里有一些例子:
根据上面的链接,您可以修复您的架构,我认为这回答了第一个问题。
至于第二个问题,你应该有一个外部事件存储。
这两种模式在book 中有很好的描述。
【解决方案2】:
- 在执行域逻辑后发出事件(对实体/域对象执行了某些操作)。首先,事件保存在存储中,然后发布到总线,其他消费者(微服务、图表中的事件处理程序)可以订阅它。事件的持久化和发布应该像一个事务。
- 每次需要对域对象执行新操作时,都会从该实体的事件存储中读取整个事件集。一些实体可能有很多事件并使用所谓的状态快照来优化性能。基本上它是 X 事件之后域对象的状态。每个 X 事件都可以创建快照。它们单独存储在事件存储中,通常事件溯源库允许配置快照。但这只是出于性能目的。
我已经快速创建了图表来展示这通常发生在 Command Handler