我有一个长时间运行的过程,有四个步骤。 S1,S2,S3,S4。 S2和S3正在顺序运行,S1可以与S2并行运行。 S4可以与S1,S2和S3并行运行。
并非所有流程都需要贯穿所有步骤。有些人只需要S2和S3。其他人可能会使用S2和S4。
现在可以创建一个传奇类并处理S1,S2,S3和S4。消息和超时处理程序中的许多If语句。下个月有人需要实现S5,并行运行S3和S4。
可以为每个可能的流程创建一个saga,但这是许多重复的代码。是否可以为每个步骤创建一个类,并通过在不同的saga类中实现所需的步骤来组成每个不同的流程?
我应该构建4个传奇并控制来自外部控制器的进程流,并仅使用传奇来执行所需的超时和持久性吗?
答案 0 :(得分:1)
这听起来像是一个相当经典的Scatter / Gather模式,你可以在一个Saga中实现。
一开始,您将拥有一些逻辑来确定哪些步骤(所有步骤可以并行运行)需要执行。您应该发送命令以完成所有这些操作,并在您的传奇数据中记录您正在等待响应的步骤。
每个步骤都作为saga外部的消息处理程序发生,并在完成时执行Bus.Reply()
。
当回复消息进入时,Saga会在完成每个步骤时注意到,当所有步骤完成后,您可以采取其他操作继续,可能会发布某种完成事件。