nservicebus saga长期运行过程

nservicebus saga长期运行过程,nservicebus,saga,Nservicebus,Saga,我有一个长时间运行的过程,包括四个步骤。S1、S2、S3、S4。S2和S3顺序运行,S1可以与S2并行运行。S4可以与S1、S2和S3并行运行 并非所有流程都需要运行所有步骤。有些只需要S2和S3。其他人可能使用S2和S4 现在可以创建一个saga类并处理S1、S2、S3和S4。消息和超时处理程序中的许多If语句。下个月,有人需要实现S5,与S3和S4并行运行 可以为每个可能的流程流创建一个传奇,但这是许多重复的代码。通过在不同的saga类中实现所需的步骤,是否可以为每个步骤创建一个类并组合每个

我有一个长时间运行的过程,包括四个步骤。S1、S2、S3、S4。S2和S3顺序运行,S1可以与S2并行运行。S4可以与S1、S2和S3并行运行

并非所有流程都需要运行所有步骤。有些只需要S2和S3。其他人可能使用S2和S4

现在可以创建一个saga类并处理S1、S2、S3和S4。消息和超时处理程序中的许多If语句。下个月,有人需要实现S5,与S3和S4并行运行

可以为每个可能的流程流创建一个传奇,但这是许多重复的代码。通过在不同的saga类中实现所需的步骤,是否可以为每个步骤创建一个类并组合每个不同的流程流


我是否应该构建4个saga并从外部控制器控制流程,并且只使用saga来执行所需的超时和持久性?

这听起来像是一个相当经典的分散/聚集模式,可以在一个saga中实现

首先,您将有一些逻辑来确定需要执行哪些步骤(所有步骤都可以并行运行)。您应该发送命令来完成所有这些事情,并在您的传奇数据中记录您正在等待响应的步骤

每一步都作为saga外部的消息处理程序进行,完成后执行
Bus.Reply()


收到回复消息后,Saga会在每个步骤完成时进行记录,当所有步骤完成后,您可以采取其他操作继续,可能会发布某种完成事件。

我接受您的答案,因为它适合所描述的情况。但是:我将实现n个传奇,并使用流程管理器模式控制它们。S1-S4本身就是长时间运行的进程,所以构建一个大的if-then-else传奇是不可维护的选项,在不涉及所有内容的情况下是不可伸缩的。而且,国家应该总是可以从传奇故事之外看到。用一个故事来做这件事,每一步都是平行的,如果不是这样的话,最终会有很多的结局。你有一个非常公开的故事,它指出了必须运行的子系统,并向它们发送“分散”消息。在我的回答中,我描述了简单的消息处理程序,但这些消息没有理由不能开始它们自己的独立传奇!第二级传奇可以使用ReplyToOriginator()向第一级传奇报告完成情况。