关于SO的第一个问题(真的吗?),所以请忍受:)
我们正在使用事件源设计解决方案。我们的某些业务流程将长期运行,因此我们计划使用 sagas 来编排命令几个聚合根。
以我的理解,如果由传奇发布的命令失败,则传奇将负责向所有先前调用的聚合根发出补偿命令。
如果将聚合根的状态从外部突变(即由其他进程/用户)(在agat_rstrong之后又参与了传奇),但是在agat_rstrong传奇之后失败,并且发出了传奇,那么应该采取什么行动将命令补偿到该聚合根?
换句话说,如何尝试补偿不是某个聚合根事件流中的最后一个的事件(以EventStore术语表示)?
最佳答案
这是一个相当棘手的情况,因为我看到的是,您可能在补偿项输入之后以无效的AR结束,从而使您的补偿 Action 无效。
您可能必须重新审视流程的设计,以便在确保您的流程经理(传奇)能够完成之前不会对AR进行更改。也许临时存储这些值以供以后更改。
另一种方法可能是防止AR上的某些命令处于某种状态,以表明它可能导致这些命令出现问题。然后,用户将无法发出那些命令。您的流程经理将负责该状态以及任何状态的过期/超时等等。
关于domain-driven-design - 事件源和Sagas-补偿性交易,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32756872/