基于SQS消息触发SWF工作流

Mer*_*wer 5 amazon-sqs amazon-swf

序言:我正在尝试为我认为是一个非常常见的用例提出一个提案,我想使用亚马逊的SWF和SQS来实现我的目标.可能还有其他服务可以更好地匹配我正在尝试的内容,因此如果您有任何建议,请随时将它们删除.

问题:最基本的需求是客户端(移动设备,Web服务器等)发布将异步处理而不响应客户端的消息 - 非常基本.

预期的实现是客户端将消息发布到预定的SQS队列.此时,客户端已完成.我们还有一个定义的SWF工作流程负责从队列中拾取消息,并且(在一些操作之后)将它放在Dynamo DB中 - 再次,所有这些都非常简单.

我似乎无法弄清楚的是,如何触发工作流程的启动.从我一直在阅读的工作流程来看,并不是一个无限期的过程.它有一个开始,一个中间和一个结尾.根据SWF文档,工作流程可以运行不超过一年(在SWF中设置超时值).

所以,我的问题是:如果我假设工作流代表一个消息处理流程,那么每当消息发布到SQS时,如何启动工作流程?

警告:我也研究过使用SNS而不是SQS.这将允许我运行可以订阅SNS的服务器,然后在发布通知时启动工作流.这当然是一种解决方案,但我想避免为单个Web服务设置服务器,然后我必须根据正在处理的消息数量来管理/扩展.我首先考虑使用SQS/SWF的原因是有一个我不必担心的自动缩放系统.

先感谢您.

Max*_*eev 6

我将创建一个侦听SQS队列的工作进程.收到消息后,它会调用SWF API来启动工作流程执行.应基于消息内容生成工作流执行ID,以确保重复的消息不会导致重复的工作流.