鉴于您并没有真正提出具体问题,因此提供“答案”有点困难。我同意你的观点,即使用定时器和信号是你想要的。
您没有指定团队如何收到有关审核的通知。我假设您通过电子邮件通知他们并将他们定向到可以查看更改的某个网站,然后单击链接以批准或不批准。单击 Approve 链接将向 Web 服务器发送一个请求,该请求将“发出”SWF 信号,表明审查已被批准。单击“不批准”的链接将“发出”SWF 信号,表明审核未获批准。你提到如果没有人对审查采取行动,你想重新通知团队(或者可能升级到经理)。假设此重新通知发生在 48 小时后。重新通知后,您在假设不批准之前再授予他们 72 小时。
在我看来,您的工作流程如下所示:
- 用户上传文件并启动工作流程
- 决定任务计划“TransformActivity”
- TransformActivity 运行,将数据转换成不同的文件,成功完成
- 决定任务计划“UpdateDatabaseActivity”
- UpdateDatabaseActivity 运行,更新数据库,并成功完成
- 决定任务计划“EmailTeamActivity”
- EmailTeamActivity 运行,向团队发送电子邮件,并成功完成
- Decider Task 将 Timer 安排为 48 小时。
如果在 48 小时内收到表示批准或不批准的信号:
- 决策者任务安排“RecordFinalDecisionActivity”
- RecordFinalDecisionActivity 将运行,将批准(或不批准)记录到数据库中,并成功完成。
- Decider Task 将关闭工作流,因为它已完成。
如果没有收到信号并且计时器触发(48 小时后):
- 决策者任务计划“EmailTeamAndManagerActivity”
- EmailTeamAndManagerActivity 运行,向团队和经理发送电子邮件,并成功完成。
- 决策者任务将另一个计时器安排为 72 小时。
如果在给定的额外 72 小时内收到指示批准或不批准的信号:
- 重复与“如果在 48 小时内收到指示批准或不批准的信号”部分相同的逻辑。
如果没有收到信号并且计时器触发(在额外的 72 小时之后):
- 此时,工作流可以假设它是“不批准”,安排“RecordFinalDecisionActivity”并在该活动完成后关闭工作流。
您不想进行“审查”活动的原因是因为该任务已安排好,然后一些活动工作人员需要回复成功。那将如何运作?当有人单击批准或不批准链接时,对网络服务器的请求将不得不从任务列表中拉下活动。但是,如果任务列表有多个活动,SWF 只会给出其中任何一个。它可能找不到正确的。现在,您可以争辩说您可以在不同的任务列表中安排不同的审查,但这只是麻烦和乏味。
完成信号以指示“外部”事件,这非常重要。关于 Signals的SWF 文档在谈论 Signals 方面做得很好。这是关于如何使用 Timers 和 Signals 的 SWF 文档。至于如何使用 SWF 和 Ruby,我真的帮不上忙。我仅通过使用 AWS Flow Framework 将 SWF 与 Java 结合使用。