java - amazon simple workflow-并行处理任务,只有在前一阶段的所有并行过程完成后才进入下一阶段

标签 java amazon-swf

我正在努力创建一个应用程序,其中有多个阶段 - 在第一阶段有多个任务要并行执行......一旦该阶段的所有任务都完成,然后处理才应该进入下一个阶段阶段。

根据我对决策者的了解,决策者可以从下一阶段的许多可能选项中选择一个。

但是我想只有当当前阶段的所有并行过程都完成后才能进入下一阶段。

这是否意味着我应该设置每个并行进程来调用下一阶段,并且在初始化下一阶段时,它应该检查前一阶段的所有并行进程是否完成,然后才真正开始处理?这意味着第一阶段的所有并行进程都将调用 corresp。第二阶段的并行进程,其中只有一个会实际进行处理(因为这将是发现前一阶段的所有进程都已完成的进程)。

有没有更好的实现方式?这样下一阶段的流程只调用一次?

最佳答案

这可以使用 flow framework 中的 Activity 返回的 Promise 对象来解决。 .

在您的决策程序代码中,为 stage1 设置一个函数,它将并行执行多个 Activity ,每个 Activity 返回一个 Promise 对象。在 List<Promise<>> 中添加所有这些 promise 对象并将此列表传递给处理阶段 2 的异步方法。

这是一个示例决策程序代码。 stage1()并行执行三个 Activity 并调用异步方法 stage2(@Wait List<Promise<Void>> promiseList) .除非满足 promiseList 中的所有 promise ,即除非 stage1 中的所有三个 Activity 都已完成,否则不会启动 stage2。

private void stage1() {
    List<Promise<Void>> promiseList = new ArrayList<Promise<Void>>();
    Promise<Void> promise1 = activityClient.activity1();
    Promise<Void> promise2 = activityClient.activity2();
    Promise<Void> promise3 = activityClient.activity3();

    promiseList.add(promise1);
    promiseList.add(promise2);
    promiseList.add(promise3);

    stage2(promiseList);
}

@Asynchronous
private void stage2(@Wait List<Promise<Void>> promiseList) {
    activityClient.activity4();
}

关于java - amazon simple workflow-并行处理任务,只有在前一阶段的所有并行过程完成后才进入下一阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952888/

相关文章:

java - 为什么从 Oracle 存储过程中检索结果集这么慢?

java - 如何获取 Eclipse 的 android studio 项目库?

java - AWS - Lambda Scheduler 调用多个 lambda 实例

php - 亚马逊 AWS 简单工作流服务 SWF PHP 示例

java - AWS SWF Flow Activity 开始关闭超时是否包括 Activity 重试?

java - 仅在显示时执行复合组件代码

java - 实时从 Sqlite 向 recyclerView 添加数据?

java - 这个排序方法的名称是什么,它是如何工作的以及它与 Arrays.sort() 相比如何?

amazon-web-services - 如何使用Amazon SWF

java - 轮询时 AWS SWF 决策者 'java.net.SocketTimeoutException: Read timed out'