2013-04-06 72 views
5

以下是该场景。用户上传一个Excel文件,这会启动验证文件的工作流程,将其转换为几个不同的文件,然后根据转换对数据库执行更新。上传完成后,结果需要由团队成员进行审查,然后才能继续。使用计时器/信号允许人工干预AWS SWF工作流程

我使用Ruby和发现,信号和计时器在SWF实现这一目标的方式。然而,Ruby的例子是缺乏或不存在的,我需要一些帮助来理解如何使用Ruby。

Ny理解到目前为止是计划的一项计时器活动,基本上暂停流程,直到计时器到期(在这一点我可以取消工作流程或电子邮件的工作人员和设置另一个计时器)或信号发送到工作流程开始下一步。决策者会处理信号,然后开始适当的活动。

任何想法或方向其它来源,将不胜感激。

感谢, 托马斯

回答

3

这有点难以提供的“答案”,给你并没有真正问一个具体问题。我同意你的看法,使用定时器和信号就是你想要的。

不指定团队如何被通知有关审核。我假设你通过电子邮件通知他们,并指示他们访问某个网站,他们可以查看更改,然后点击指向批准或不批准的链接。点击批准链接将向Web服务器发送一个请求,该请求将向SWF发送信号,表明该评论已被批准。点击“不批准”链接会向SWF发出信号表明该评论尚未获得批准。如果没有人对审核采取行动,您提到您要对团队进行再审核(或者升级为经理)。假设这种再通过48小时后发生。复职后,你再批准他们72小时之前,不要批准。

这是你的工作流程的样子对我说:

  1. 用户上传文件,并揭开序幕工作流程
  2. 决胜局任务计划“TransformActivity”
  3. TransformActivity运行,转换数据到不同的文件,成功完成
  4. Decider任务计划“UpdateDatabaseActivity”
  5. UpdateDatabaseActivity运行,更新数据库并成功完成
  6. 决胜局任务计划“EmailTeamActivity”
  7. EmailTeamActivity运行,电子邮件的团队,并成功完成
  8. 决胜局任务时间表48小时定时器。

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

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

如果没有接收到信号和定时器触发(48小时后):

  1. 决胜盘任务调度“EmailTeamAndManagerActivity”
  2. EmailTeamAndManagerActivity运行,电子邮件团队和经理,并成功完成。
  3. 判定器任务安排另一个定时器72小时。

如果指示批准或不批准给出的72小时内被接收到的信号:

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

如果没有接收到信号且定时器火灾(附加72小时后):

  1. 此时,工作流可以假定这是一个不允许,调度“RecordFinalDecisionActivity”并在活动完成后关闭工作流程。

您不希望进行“审查”活动的原因是因为该任务被安排,然后一些活动工作人员需要回复成功。这将如何工作?当有人点击“批准”或“不批准”链接时,对网络服务器的请求将不得不从任务列表中拉下活动。但是,如果任务列表具有多个活动,则SWF只会发出其中的任何一个。它可能没有得到正确的。现在,你可以争辩说,你可以在不同的任务列表中安排不同的评论,但这只是繁琐而乏味。

信号是用来表示一个“外部”事件,这非常重要。 SWF documentation on Signals在谈论信号方面做得很好。这是SWF documentation on how to use Timers and Signals。至于关于如何使用SWF和Ruby的细节,我无法真正帮助你。我只使用AWS Flow Framework将SWF与Java结合使用。

+0

感谢您的好解释。 我认为你设置的这些定时器是活动任务超时的副本。 为了给一个exec发信号,你需要domain + workflowId,为了响应一个activity,你只需要taskToken。 太糟糕了,当前的Ruby SDK不允许你只用taskToken(bit.ly/14QOIC8)实例化一个活动任务。 (对不起,我被宠坏了,我直接通过API工作)所以是的,你必须“下载”任务。 我还是比较喜欢活动。询问执行官清楚地表明它有一个[审查]活动任务。 – jmettraux 2013-04-08 08:14:31

+0

是的...很好的解释。我真的在寻找关于我的建议流程的评论,看看是否有其他方法可以实现。而且你已经确认这是要走的路。我一直在阅读SDK源代码,并且已经找到了如何获得流程工作的基础知识,并将其发布到此处。再次感谢。 – 2013-04-08 21:50:25

1
  1. 用户上传excel文件,做“StartWorkflowExecution”,即排队决策任务
  2. 决定工人通知流是新/“第一阶段”,它的时间表“转换文件”活动任务
  3. 活动工人拿起任务,并执行“转换文件”活动,完成后做“RespondActivityTaskCompleted”与“完成转换”的结果,即排队决策任务
  4. 决定工人拿起十二月ision任务,告示转换完成,并安排新的活动任务
  5. 活动工人拿起行动的任务,注意到它是一个团队成员(根据调度活动任务时所决定的工人给出的说明),团队成员得到通知,莫名其妙地执行他的行动,然后以某种方式通知活动工人将回复“RespondActivityTaskCompleted”

我没有看到一个定时器或信号的需要,这只是普通的流动。如果您想要重复发生事件,超时和/或中断流程,那么这两个概念很有用。

请注意,您可以通过任务列表区分活动工人(例如活动工人自动工作VS活动工人人类参与者,等等)。

+0

你掩盖了#5中的活动工作者。如何分配,通知用户,等待响应(可能需要几天),然后回复SWF?使用计时器和信号是正确的方法。 – alfredaday 2013-04-06 23:54:26

+0

该评论是一项活动。 – jmettraux 2013-04-07 02:54:15

+0

评论太久了,请在这里查看:https://gist.github.com/anonymous/5328911 – jmettraux 2013-04-07 03:58:27