基于SQS消息触发SWF工作流



序言:我正试图为我认为非常常见的用例制定一个提案,我想使用亚马逊的SWF和SQS来实现我的目标。可能还有其他服务会更好地匹配我想要做的,所以如果你有建议,请随时扔掉。

问题:最基本的需求是客户端(移动设备、web服务器等)发布一条消息,该消息将在没有客户端响应的情况下异步处理-非常基本。

预期的实现是让客户端向预先确定的SQS队列发布消息。这时,客户端就完成了。我们还将有一个定义的SWF工作流,负责从队列中提取消息,并(在进行一些操作后)将其放置在Dynamo DB中——同样,所有这些都相当简单。

然而,我似乎不知道如何触发工作流启动。从我所读到的内容来看,工作流并不是一个无限的过程。它有开始、中间和结束。根据SWF文档,工作流的运行时间不能超过一年(在SWF中设置超时值)。

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

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

提前谢谢。

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

您可以为此目的使用AWS Lambda。lambda函数将由SQS事件调用,因此您不必显式编写队列轮询器。lambda函数然后可以向SWF发出post请求,以启动工作流

最新更新