【问题标题】:Amazon SWF Parallel Child Workflow Executions Halt Parent WorkflowAmazon SWF 并行子工作流执行暂停父工作流
【发布时间】:2015-09-18 16:21:10
【问题描述】:

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

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

代码:

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

【问题讨论】:

  • 您查看过父子工作流的历史吗?它们应包含准确描述所有这些事件处于何种状态的事件。
  • 你能分享你在哪里启动子工作流的代码 sn-p。怀疑有什么不对的地方
  • @MaximFateev 我看过历史。父历史显示一个子执行开始和完成,然后在最后一个事件是 DecisionTaskCompleted 的地方发生父工作流的另一次重播,仅此而已。它会一直保持这种状态,直到父级超时。子工作流历史正是我所期望的,所有活动都完成了,最后一个事件是子工作流完成。

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


【解决方案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));

这样做是为了在子工作流启动后支持与它的通信。例如,同一客户端可用于发送 signal 或检索 runId

【讨论】:

  • 抱歉,我没有展示客户端对象的实例化。是的,我正在使用 factory.getClient 方法。
  • 您是否为每个子工作流使用单独的客户端实例?
  • 不,我不是。我打算这样做吗?
  • 从文档中显然不清楚,但是对于每个子工作流执行,都应该创建一个新客户端。查看生成的客户端界面。它包含返回特定于每个子工作流执行的数据(如 runId)的方法。
  • 是的,这就是我所需要的。谢谢@MaximFateev!如果你把它写下来作为答案,我可以接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 2015-08-10
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多