事件采购和传奇 - 补偿交易

tda*_*viu 5 domain-driven-design distributed-transactions cqrs event-sourcing

关于SO的第一个问题(真的???),请跟我一起请:)

我们正在使用事件采购来构建解决方案.我们的一些业务流程将长期运行,因此我们计划使用sagas将命令编排到多个聚合根.

根据我的理解,如果一个saga发出的命令失败,那么saga将负责向所有先前调用的聚合根发出补偿命令.

如果聚合根的状态在参与saga 之后在外部(即由其他进程/用户)发生变异,但是 saga失败并向该聚合根发出补偿命令之前,应该采取什么行动呢?

换句话说,如何尝试补偿某个聚合根的事件流中的最后一个事件(在EventStore语言中说话)?

Ebe*_*oux 2

这是一个相当棘手的情况,因为我看到的是,您在补偿输入后可能会得到无效的 AR ,从而使您的补偿操作无效。

您可能必须重新查看流程的设计,以便在确定流程管理器(saga)能够完成之前不会对 AR 进行更改。也许暂时存储这些值以供以后更改。

另一种方法可能是阻止 AR 上的某些命令,如果 AR 处于某种状态,表明它可能会导致这些命令出现问题。用户将无法发出这些命令。您的流程管理器将处理状态以及任何状态到期/超时等。