gpt4 book ai didi

CQRS:通过命令而不是事件启动进程管理器

转载 作者:行者123 更新时间:2023-12-01 04:37:34 25 4
gpt4 key购买 nike

在许多示例中,我看到流程管理器在某些事件发生时启动。

PlaceOrder -> Order Aggregate -> OrderPlaced -> Purchase Process Manager -> ...

但是通过命令启动进程管理器可以吗?
Start Process -> Purchase Process Manger -> PlaceOrder -> Order Aggregate -> Order Placed -> Purchase Process Manger -> Charge credit card -> Payment Service -> ...

我在第一种方法中看到的问题是,当 Order Aggregate 发布 OrderPlaced 事件时,该事件可能会丢失并且采购流程管理器永远不会启动,并且我会在系统中损坏状态。

但是在第二种方法中,如果一段时间后 Process Manger 没有收到 OrderPlaced 事件,我可以重试 PlaceOrder 命令。

最佳答案

是的,您可以(重新)手动启动 Saga/流程管理器。所以你可以结合这两种方法。

... the event could be lost and Purchase Process Manager would never start and I would have corrupted state in the system.



这在很大程度上取决于您的架构。您应该拥有检测错过的事件并重新启动这些 Saga 实例的机制。这是可行的,因为 Saga 应该能够从任何情况中恢复,例如错过的事件、重新排序的事件、重复的事件等。

因此,除了事件处理程序之外,Saga 还可以有一个 start您应该能够随时调用的方法,而不会产生任何负面影响。如果 Saga 没有错过任何事件,那么它应该什么都不做。如果您在设计聚合时考虑到幂等性(正如您应该做的那样!),那么 Saga 可能会更简单,因为它可以将命令重新发送到聚合,并且不会发生任何(坏事),因为它们会撞到幂等性的墙。

关于CQRS:通过命令而不是事件启动进程管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51569880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com