cqrs - 传奇、流程管理器和基于文档的方法之间有什么区别?

标签 cqrs

据我了解,这三个概念都与长时间运行的事务相关。

据我了解,流程管理器是一个有限状态机,它只是对事件使用react并发出命令。它不包含任何业务逻辑,它只是进行路由。它的目标是让您进入最终状态,您知道您的交易已成功或失败。

到目前为止,一切顺利。

但现在我的问题开始理解:

  • 与流程管理器相比,传奇是什么?
  • 还有基于文档的方法,如 CQRS sagas - did I understand them right? 中提到的。 ……据我了解,文档只是一张“纸”,您可以在其中做笔记并分发。这如何适应命令和事件的概念?

任何人都可以解释一下这些差异,以及 - 我特别感兴趣的 - 这些概念中的哪些有什么用处,以及何时你确实需要什么。它们是相互排斥的吗?你能只靠其中一个人一路走下去吗?是否存在需要多个的场景? ...?

最佳答案

What is a saga in contrast to a process manager?

这些模式的意图是不同的。流程管理器是一种工作流模式,正如您所说,它可以构建在状态机之上。流程管理器将保留消息之间的状态,并将包含逻辑以确定应采取哪些操作来响应消息(例如,转换状态或发送另一条消息)。某些框架错误地将这些称为传奇。

相比之下,传奇(根据原始定义)是一种旨在帮助管理故障的模式。它涉及跨系统的多个工作流程,其中每个工作流程都允许在其他地方发生故障时在稍后的事务中采取某种形式的补偿操作。

这种补偿是传奇的定义特征。请注意,传奇本身并不知道补偿操作可能是什么。 Sagas 通常使用路由滑动模式来实现。

Are they mutually exclusive? Can you go along all the way with only one of them?

它们并不相互排斥 - 例如,参与传奇的系统可能会使用流程管理器来实际处理其处理部分。

其他资源

其中一些帖子可能有助于提供更多详细信息并提供示例:

关于cqrs - 传奇、流程管理器和基于文档的方法之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528015/

相关文章:

Golang 和 DDD 域建模

cassandra - 事件溯源微服务: How to manage timestamp

node.js - 如果 wolkenkit(或任何)事件源事件是非结构化的,会有问题吗?

domain-driven-design - DDD/CQRS : where to persist

domain-driven-design - CQRS - 异常场景的域异常与事件

cqrs - 在 api 平台中实现事件源/CQRS 方法

c# - 我如何使用 cqrs 处理 claim 检查

architecture - 在 CQRS 和 DDD 的背景下,您将如何处理略有不同的用例?

events - 为什么命令和事件要分开表示?