Amazon SWF并行子工作流执行暂停父工作流

时间:2015-09-18 16:21:10

标签: java amazon-web-services amazon-swf

我正在尝试使用不同的起始参数开始两个并行执行子工作流。但是,我注意到只运行了其中一个子工作流程执行。由于未调度任务导致父工作流执行停止,导致执行历史记录中没有任何进一步的活动,直到超时为止。没有抛出异常或错误,它只是停止做任何事情。有趣的是,它始终是完成的第二个子工作流程执行。

如果父级只运行子工作流的一次执行,则子级成功完成,父级工作流继续完成。我怀疑它与同时运行子工作流的多个副本有关,并且由于他们轮询相同的任务列表而相互干扰;我只是不知道我应该如何处理这个问题。

代码:

ProcessRunnerClient childWorkflowClient = factory.getClient();
List<Promise<T>> childWorkflowsDone = new ArrayList<Promise<T>>;
switch(condition){
case 1:
    childWorkflowsDone.add(childWorkflowClient.method(case1Params));
// Works fine
    break;
case 2:
    childWorkflowsDone.add(childWorkflowClient.method(case2Params));
// Works fine
    break;
case 3:
    childWorkflowsDone.add(childWorkflowClient.method(case1Params));
    childWorkflowsDone.add(childWorkflowClient.method(case2Params));
// The execution of the child workflow with case2Params completes,
// and parent execution suspends
    break;
default:
    throw new WorkflowException("Condition " + condition + " not supported");
}

1 个答案:

答案 0 :(得分:1)

确保使用自己生成的客户端实例启动每个子工作流。所以将你的例子改为:

List<Promise<T>> childWorkflowsDone = new ArrayList<Promise<T>>;
ProcessRunnerClient childWorkflowClient1 = factory.getClient()
childWorkflowsDone1.add(childWorkflowClient.method(params1));
ProcessRunnerClient childWorkflowClient2 = factory.getClient()
childWorkflowsDone.add(childWorkflowClient2.method(params2));

完成后,它支持与子工作流程的通信。例如,可以使用相同的客户端发送信号或检索 runId