前言:我正在尝试针对我认为非常常见的用例提出一个建议,并且我想使用亚马逊的 SWF 和 SQS 来实现我的目标。可能还有其他服务可以更好地匹配我正在尝试做的事情,所以如果您有建议,请随时将它们扔掉。
问题:最基本的需求是客户端(移动设备、Web 服务器等)发布一条消息,该消息将在不响应客户端的情况下异步处理 - 非常基本。
预期的实现是让客户端将消息发布到预先确定的 SQS 队列。至此,客户端就完成了。我们还将有一个已定义的 SWF 工作流,负责从队列中提取消息并(经过一些操作)将其放入 Dynamo DB 中——同样,这一切都相当简单。
不过,我似乎无法弄清楚如何触发工作流程开始。从我一直在阅读的内容来看,工作流程并不意味着是一个不确定的过程。它有开始、中间和结束。根据 SWF 文档,工作流可以运行不超过一年(在 SWF 中设置超时值)。
所以,我的问题是:如果我假设一个工作流代表一个消息处理流,我如何在消息发布到 SQS 时启动工作流?
警告:我也研究过使用 SNS 而不是 SQS。这将允许我运行一个可以订阅 SNS 的服务器,然后在发布通知时启动工作流。这当然是一种解决方案,但我想避免为单个 Web 服务设置服务器,然后我必须根据正在处理的消息数量来管理/扩展。我首先考虑使用 SQS/SWF 的原因是拥有一个我不必担心的自动缩放系统。
先感谢您。