首页 > 解决方案 > DomainEventPublisher 一致性

问题描述

刚刚阅读了 Vaughn Vernon 的有效聚合设计,我想知道与事件发布相关的失败。

在第 9 页(PDF 的第 3 页)的给定示例中,我们调用DomainEventPublisher.publish(). 正在发布的事件允许其他聚合执行它们的行为。

我想知道的是:如果DomainEventPublisher.publish()失败会发生什么?如果DomainEventPublisher.publish()成功,但交易失败会发生什么?

实现如何处理这两种情况?

标签: domain-driven-designaggregateroot

解决方案


DomainEventPublisher.publish()是同步的。您将设置一个通用处理程序(处理所有事件),它将事件存储在与业务流程相同的数据库事务中,这意味着您的事件存储必须能够与您依赖存储状态的任何其他存储机制进行事务处理你的聚合体。

一旦将事件写入磁盘事务,您就可以将它们放在消息队列中以进行异步传递。

还有其他已知的方法吗?

好吧,您可以在 AR 上的集合中记录事件,而不是使用静态DomainEventPublisher,就像在事件源中一样,然后实现一个集中的机制来存储它们(例如事务挂钩、使用方面等)。


推荐阅读