0

我有一个长期运行的过程,有四个步骤。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,但这是许多重复的代码。是否可以通过在不同的 saga 类中实现所需的步骤来为每个步骤创建一个类并组成每个不同的流程?

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

4

1 回答 1

1

这听起来像是一个相当经典的 Scatter/Gather 模式,您可以在一个 Saga 中实现它。

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

每个步骤都作为 saga 外部的消息处理程序发生,并Bus.Reply()在完成时执行。

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

于 2013-05-02T22:06:28.007 回答