据我所知,这三个概念都与长期交易有关。
据我所知,进程管理器是一个有限状态机,它只对事件做出反应并发出命令。它不包含任何业务逻辑,只是路由。它的目标是让您进入最终状态,在那里您知道您的交易成功或失败。
到目前为止,非常好。
但现在我的理解开始了:
任何人都可以解释这些差异,并且 - 我特别感兴趣的是 - 这些概念中的哪一个对于什么是好的,什么时候你需要什么。它们是互相排斥的吗?你可以只用其中一个一路走吗?您是否需要多个场景? ...?
答案 0 :(得分:38)
与流程经理相比,什么是传奇?
这些模式的意图是不同的。流程管理器是一种工作流模式,正如您所说,它可以构建在状态机之上。进程管理器将保留消息之间的状态,并将包含逻辑以确定响应消息应采取的操作(例如,转换状态或发送另一个消息)。有些框架错误地将这些称为传奇。
相比之下,一个传奇(根据原始定义)是一种旨在帮助管理失败的模式。它涉及跨系统的多个工作流程,在其他地方发生故障的情况下,每个工作流程都允许在以后的事务中采取某种形式的补偿操作。
这种补偿是传奇的定义特征。请注意,saga本身并不知道补偿操作可能是什么。 Sagas通常使用路由滑动模式实现。
他们互相排斥吗?你可以只用其中一个一路走吗?
它们不是互斥的 - 例如,参与传奇的系统可能会使用流程管理器来实际处理其处理。
其他资源
其中一些帖子可能有助于提供更多细节并提供示例:
答案 1 :(得分:26)
在MSDN上查看CQRS Journey项目:
http://msdn.microsoft.com/en-us/library/jj591569.aspx
澄清术语
术语saga通常用于讨论CQRS以引用a 在有界区域之间协调和路由消息的代码片段 上下文和聚合。但是,出于本指南的目的,我们 我更喜欢使用术语流程管理器来引用这种类型的代码 神器。这有两个原因:
有一个众所周知的,预先存在的术语saga的定义,其含义与通常所理解的含义不同。 与CQRS的关系。 术语流程管理器是对此类代码工件执行的角色的更好描述。
虽然术语saga经常用于CQRS 模式,它有一个预先存在的定义。我们选择使用 本指南中的术语流程管理器,以避免与此混淆 预先存在的定义。
与分布式系统相关的术语saga最初是 Hector Garcia-Molina和Kenneth在论文“Sagas”中定义 萨利姆。本文提出了一种机制,它称之为传奇 替代使用分布式事务来管理 长期运营的业务流程。该文件承认该业务 流程通常由多个步骤组成,每个步骤都是如此 涉及交易,可以实现整体一致性 通过将这些单独的事务分组为分布式 交易。但是,在长期运行的业务流程中,使用 分布式事务可能会影响性能和并发性 由于必须在持续时间内保持锁定而导致系统崩溃 分布式交易。
答案 2 :(得分:8)
Saga在进程管理器处没有状态。
另一个区别 - 进程管理器是状态机,Saga不是。
佐贺没有
..和Process Manager已经
在我的博客中阅读更多内容: http://blog.devarchive.net/2015/11/saga-vs-process-manager.html
答案 3 :(得分:4)
Saga和Process Manager是两种集成模式。它们非常相似,但不完全相同。
答案 4 :(得分:2)
当在设计时可能不知道所需的步骤并且可能不是连续的时,Process Manager和saga都会通过多个处理步骤路由消息。
流程管理器模式是一个持久的事件调度程序,它封装了流程特定的逻辑,并维护一个中心控制点,决定流程完成后要执行的下一步操作。流程经理维护状态,例如说从客户处获得了付款,现在必须将订单发送给他们的事实将保留在流程管理器中。
佐贺经理模式。 封装流程逻辑,决定流程完成后要执行的操作。一个saga没有状态,因此完全基于传入消息或事件的内容决定下一步做什么。因此,在流程进行付款的情况下,该流程还会创建一条新消息,指示现在必须发送订单,包括需要发送的订单以及向谁发送订单。该邮件还包含其他付款信息,因此如果发送订单出错,付款将被退还。