前言:我正在尝试针对我认为非常常见的用例提出一个提案,并且我想使用 Amazon 的 SWF 和 SQS 来实现我的目标。可能还有其他服务更符合我想要做的事情,所以如果您有建议,请随时扔掉它们。
Problem:最基本的需求是客户端(移动设备、Web 服务器等)发布一条消息,该消息将被异步处理,而不会对客户端做出响应 - 非常基本。
预期的实现是让客户端将消息发布到预先确定的 SQS 队列。至此,客户端就完成了。我们还将有一个定义的 SWF 工作流程,负责从队列中拾取消息并(经过一些操作)将其放入 Dynamo DB 中 - 同样,这一切都相当简单。
但我似乎无法弄清楚如何触发工作流程启动。根据我的阅读,工作流程并不意味着是一个无限期的过程。它有开始、中间和结束。根据 SWF 文档,工作流程的运行时间不能超过一年(在 SWF 中设置超时值 http://docs.aws.amazon.com/amazonswf/latest/developerguide/setting-timeouts.html#setting-timeouts-limits).
所以,我的问题是:如果我假设一个工作流程代表一个消息处理流程,那么每当一条消息发布到 SQS 时,如何启动该工作流程?
Caveat:我也考虑过使用 SNS 而不是 SQS。这将允许我运行一个可以订阅 SNS 的服务器,然后在发布通知时启动工作流程。这当然是一种解决方案,但我想避免为单个 Web 服务设置服务器,然后我必须根据正在处理的消息数量来管理/扩展该服务器。我首先考虑使用 SQS/SWF 的原因是拥有一个我不必担心的自动缩放系统。
先感谢您。
我将创建一个监听 SQS 队列的工作进程。收到消息后,它会调用 SWF API 来启动工作流执行。应根据消息内容生成工作流执行id,以确保重复的消息不会导致工作流重复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)