使用计时器/信号允许人员干预AWS SWF工作流程

Tho*_*ton 5 workflow amazon-web-services

这是场景.用户上传Excel文件,这将启动一个工作流,该工作流验证文件,将其转换为几个不同的文件,然后根据转换执行数据库更新.上传后,结果需要由团队成员审核,然后才能继续流程.

我正在使用Ruby,并发现Signals和Timers是在SWF中实现这一目标的方法.但是,Ruby示例缺乏或不存在,我需要一些帮助来理解如何使用Ruby.

到目前为止,Ny的理解是计划定时器活动基本上暂停流程,直到计时器到期(此时我可以取消工作流程或通过电子邮件发送工作人员并设置另一个计时器)或者将信号发送到工作流程以启动下一步.决策者将处理信号,然后启动适当的活动.

任何对其他来源的想法或指示都将非常感激.

谢谢,托马斯

alf*_*day 3

考虑到您并没有真正提出具体问题,提供“答案”有点困难。我同意你的观点,使用计时器和信号就是你想要的。

您没有指定团队如何收到有关审核的通知。我假设您通过电子邮件通知他们,并将他们引导到某个网站,他们可以在其中查看更改,然后单击“批准”或“不批准”的链接。单击“批准”链接将向 Web 服务器发送请求,该服务器将“通知”SWF 审核已获得批准。单击“不批准”链接将向 SWF 发出“信号”,表明审核尚未获得批准。您提到,如果没有人对审核采取行动,您希望重新通知团队(或者可能升级给经理)。假设此重新通知发生在 48 小时后。重新通知后,您再给他们 72 小时的时间,然后再认为不批准。

在我看来,您的工作流程是这样的:

  1. 用户上传文件并启动工作流程
  2. 决策者任务安排“TransformActivity”
  3. TransformActivity运行,将数据转换成不同的文件,并成功完成
  4. 决策者任务计划“UpdateDatabaseActivity”
  5. UpdateDatabaseActivity 运行、更新数据库并成功完成
  6. 决策者任务安排“EmailTeamActivity”
  7. EmailTeamActivity 运行、向团队发送电子邮件并成功完成
  8. Decider Task 安排一个 48 小时的 Timer。

如果在 48 小时内收到指示批准或不批准的信号:

  1. 决策者任务安排“RecordFinalDecisionActivity”
  2. RecordFinalDecisionActivity 将运行,将批准(或不批准)记录到数据库中,并成功完成。
  3. 然后决策者任务将关闭工作流程,因为它已完成。

如果未收到信号且计时器触发(48 小时后):

  1. Decider Task 安排“EmailTeamAndManagerActivity”
  2. EmailTeamAndManagerActivity 运行,向团队和经理发送电子邮件,并成功完成。
  3. Decider Task 安排另一个计时器 72 小时。

如果在额外的 72 小时内收到指示批准或不批准的信号:

  1. 重复与“如果在 48 小时内收到指示批准或不批准的信号”部分相同的逻辑。

如果未收到信号且计时器触发(另外 72 小时后):

  1. 此时,工作流可以假定它是“不批准”,安排“RecordFinalDecisionActivity”并在该活动完成后关闭工作流。

您不想进行“审核”活动的原因是因为该任务已计划,然后某些活动工作人员需要回复成功。那会如何运作呢?当有人单击“批准”或“不批准”链接时,向网络服务器发出的请求必须从任务列表中拉取该活动。但是,如果任务列表有多个活动,则 SWF 仅给出其中之一。它可能找不到合适的人。现在,您可能会争辩说,您可以在不同的任务列表中安排不同的审核,但这只是麻烦且乏味的。

发出信号是为了指示“外部”事件,这正是如此。关于信号的 SWF 文档在讨论信号方面做得很好。以下是有关如何使用计时器和信号的 SWF 文档。至于如何使用SWF和Ruby的细节,我无法真正帮助你。我仅通过 AWS Flow Framework 将 SWF 与 Java 结合使用。