将活动任务路由到SWF车队中的特定工作人员

时间:2018-03-12 19:48:47

标签: amazon-swf

考虑从池中的任何主机上执行下载活动的fileprocessing示例,然后转换文件并将结果上载到与第一个相同的主机上,是否有办法将活动任务路由到(并非总是)基于工人可用性的SWF车队中的特定工人,原因是工人不应该过载可能影响延迟的任务。

1 个答案:

答案 0 :(得分:0)

有两个用例不会使主机超载任务。第一种是主机只需要限制在其上运行的多个并行活动。它是通过设置ActivityWorker.setTaskExecutorThreadPoolSize属性来完成的。

第二种情况是主机需要限制在其上运行的活动序列的数量。例如,在文件处理示例中,限制要同时处理的文件数。解决方案是使用一个特殊的信号量活动,它在整个序列的持续时间内运行。以下是实施的概要:

  1. 主持人使用单独的活动工作人员在特殊的常见任务列表上侦听“信号量”活动。
  2. 此worker上的并行活动数量通过setTaskExecutorThreadPoolSize限制。
  3. 一旦“信号量”活动开始在主机上执行,它就会向主机特定任务列表的工作流发送信号。然后它只是定期给SWF心跳。
  4. 来自给定工作流程的所有其他活动将被分派到通过“信号量”活动发送的信号接收的主机特定任务列表。
  5. 完成最后一个主机特定活动后,“信号量”活动将被取消。
  6. 信号量活动了解下一次心跳的取消。然后它重新抛出取消异常,该异常与worker一起完成,并在任务执行器线程池中释放一个位置。
  7. 变体是不使用取消,而是通过序列中的最后一个活动通知正在进行的信号量活动。