我需要Amazon分发一些工作,确保它是异步完成的,确保它以可靠的方式存储,并自动重新启动。但是,我需要的工作流逻辑非常简单:它只是让单个任务执行。
我现在按照应该做的方式来实现它:
在我看来,我可以让决策者完成工作--就像以前一样--并立即完成工作流的执行。这将照顾到,很多代码的。(活动也可能失败,超时等,所有我目前需要满足的事情。)
因此,回到我的问题:我能有一个决策者来执行工作本身并立即完成“工作流”吗?
发布于 2013-07-24 08:13:37
是。实际上,我认为您想出了一个有趣的用例:使用最小的工作流作为分布式系统中一次性操作的集中式锁定机制--比如从多个集群中的单个主机执行cron作业(主机必须首先进行选举,无论哪一个锁成功执行一个操作)。在Amazon和最低代码量方面也可以做到这一点:
一个小型Python示例,使用boto.swf (使用1.From this post来设置域):
要对决定器进行编码:
#MyDecider.py
import boto.swf.layer2 as swf
class OneShotDecider(swf.Decider):
domain = 'stackoverflow'
task_list = 'default_tasks'
version = '1.0'
def run(self):
history = self.poll()
if 'events' in history:
decisions = swf.Layer1Decisions()
print 'got the decision task, doing the work'
decisions.complete_workflow_execution()
self.complete(decisions=decisions)
return False
return True要开始做决定:
$ ipython -i decider.py
In [1]: while OneShotDecider().run(): print 'polling SWF for decision tasks'最后,要启动工作流:
$ ipython
In [1]: wf_type = swf.WorkflowType(domain='stackoverflow', name='MyWorkflow', version='1.0', task_list='default_tasks')
In [2]: wf_type.start()
Out[2]: <WorkflowExecution 'MyWorkflow-1.0' at 0x32e2a10>回到决策窗口,你会看到这样的东西:
polling SWF for decision tasks
polling SWF for decision tasks
got the decision task, doing the work如果您的工作流可能会发展其业务逻辑或增加活动的数量,那么最好坚持让决策者执行业务逻辑和工作人员解决任务的标准方法。
发布于 2014-10-14 23:28:24
虽然是的,但您可以这样做(正如另一个答案所指出的),在这样做之前有一些事情需要考虑:
https://stackoverflow.com/questions/17819250
复制相似问题