繁体   English   中英

Amazon SWF并行子工作流程执行中止了父工作流程

[英]Amazon SWF Parallel Child Workflow Executions Halt Parent Workflow

我正在尝试使用不同的启动参数启动子工作流程的两个并行执行。 但是,我注意到这些子工作流程执行中只有一个运行。 父工作流程的执行由于未计划的任务而暂停,这导致执行历史记录中的任何活动直到超时都没有。 没有抛出异常或错误,它只是停止做任何事情。 有趣的是,总是第二个子工作流程执行完成。

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

码:

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");
}

确保每个子工作流程都使用其自己的生成客户端实例启动。 因此,将您的示例更改为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM