domain-driven-design - DomainEventPublisher 一致性
问题描述
刚刚阅读了 Vaughn Vernon 的有效聚合设计,我想知道与事件发布相关的失败。
在第 9 页(PDF 的第 3 页)的给定示例中,我们调用DomainEventPublisher.publish()
. 正在发布的事件允许其他聚合执行它们的行为。
我想知道的是:如果DomainEventPublisher.publish()
失败会发生什么?如果DomainEventPublisher.publish()
成功,但交易失败会发生什么?
实现如何处理这两种情况?
解决方案
DomainEventPublisher.publish()
是同步的。您将设置一个通用处理程序(处理所有事件),它将事件存储在与业务流程相同的数据库事务中,这意味着您的事件存储必须能够与您依赖存储状态的任何其他存储机制进行事务处理你的聚合体。
一旦将事件写入磁盘事务,您就可以将它们放在消息队列中以进行异步传递。
还有其他已知的方法吗?
好吧,您可以在 AR 上的集合中记录事件,而不是使用静态DomainEventPublisher
,就像在事件源中一样,然后实现一个集中的机制来存储它们(例如事务挂钩、使用方面等)。
推荐阅读
- angular - 如何在 Angular 中按 2 引用表单元素?
- html - 在 HTML 中播放实时流媒体 .wav 文件
- rust - 将属性应用于宏扩展
- javascript - 试图让 Cypress、TypeScript 和 IstanbulJS 一起工作
- c++ - `向量之间的区别
v;`和`向量 v = 向量 ();` - autocad - 如何为 POLYLINE 编写 DXF 代码?
- apache-spark - 在不使用 collect 的情况下迭代 spark 数据帧的每一行
- ubuntu - 未检测到正确的 cmake 版本,无法安装 ANT
- javascript - 如何在 javascript 中使用 youtube data api 获取查看次数?
- php - 如何创建一个可以从 mysql 调用特定数据库的文件取决于用户选择的内容?