将 activity 任务路由到 SWF 队列中的特定工作人员
Routing an activity task to a specific worker in the SWF fleet
我有多个工作主机轮询我的 SWF 的以下任务:
- Activity 1: 执行一些业务逻辑来创建一个大文件。
- Activity 2:等待一段时间(人工批准,定时器等)
- Activity 3:使用某种协议传输文件(由 SWF 的输入参数控制)。
- Activity 4:清理本地生成的文件。
Step-1 中生成的文件需要在Step-3 中再次使用,最终在工作流结束时被丢弃。
如果只有 1 台主机轮询所有任务,系统就可以正常工作。但是,当我有多个 worker 时,我似乎无法确保 task-1 和 task-3 最终会在同一台主机上。
我想避免做以下事情:
- 在第 1 步将文件上传到中央存储库(比如 S3)并在第 3 步下载它;或
- 任务 1 和任务 3 有一个 activity。
我有以下问题:
- 是否可以控制后续活动在同一主机上 运行 而不是转到我队列中的任何随机主机?
- 在工作流中的不同活动中重新使用资源的具体guidelines/best做法是什么?
- 是否可以控制后续活动在
上运行
同一个主机,而不是转到我队列中的任何随机主机?
是的,绝对是。基本思想是 SWF 任务列表(用于传送 activity 任务的队列)是动态的。因此每个主机都可以有自己的任务列表,工作流可以在调用 activity 时指定特定的任务列表名称。请参阅 fileprocessing 示例,该示例在池中的任何主机上执行下载 activity,然后转换文件并在与第一个相同的主机上上传结果。
- 列表项 guidelines/best 重用工作流中不同活动中生成的资源的具体做法是什么?
在工作进程内存或本地磁盘上缓存结果的方法被认为是最佳实践。有时使用外部数据存储并每次都获取它也很有意义。
我有多个工作主机轮询我的 SWF 的以下任务:
- Activity 1: 执行一些业务逻辑来创建一个大文件。
- Activity 2:等待一段时间(人工批准,定时器等)
- Activity 3:使用某种协议传输文件(由 SWF 的输入参数控制)。
- Activity 4:清理本地生成的文件。
Step-1 中生成的文件需要在Step-3 中再次使用,最终在工作流结束时被丢弃。
如果只有 1 台主机轮询所有任务,系统就可以正常工作。但是,当我有多个 worker 时,我似乎无法确保 task-1 和 task-3 最终会在同一台主机上。
我想避免做以下事情:
- 在第 1 步将文件上传到中央存储库(比如 S3)并在第 3 步下载它;或
- 任务 1 和任务 3 有一个 activity。
我有以下问题:
- 是否可以控制后续活动在同一主机上 运行 而不是转到我队列中的任何随机主机?
- 在工作流中的不同活动中重新使用资源的具体guidelines/best做法是什么?
- 是否可以控制后续活动在
上运行 同一个主机,而不是转到我队列中的任何随机主机?
是的,绝对是。基本思想是 SWF 任务列表(用于传送 activity 任务的队列)是动态的。因此每个主机都可以有自己的任务列表,工作流可以在调用 activity 时指定特定的任务列表名称。请参阅 fileprocessing 示例,该示例在池中的任何主机上执行下载 activity,然后转换文件并在与第一个相同的主机上上传结果。
- 列表项 guidelines/best 重用工作流中不同活动中生成的资源的具体做法是什么?
在工作进程内存或本地磁盘上缓存结果的方法被认为是最佳实践。有时使用外部数据存储并每次都获取它也很有意义。