亚马逊简单的工作流程 - 并行处理任务,只有在前一阶段的所有并行流程完成后才能进入下一阶段

Arv*_*ind 1 java amazon-swf

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

从我读到的关于决策者的内容来看,决策者可以从下一阶段的众多可能选项中选择一种.

但是,只有当前阶段的所有并行流程都完成时,我才想进入下一阶段.

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

有没有更好的方法来实现这个?那么下一阶段的过程只被召唤一次?

viv*_*arg 5

这可以使用流框架中的活动返回的Promise对象来解决.

在你的decider代码中,有一个stage1函数,它将并行执行多个活动,每个活动返回一个Promise对象.在a中添加所有这些promise对象,List<Promise<>>并将此List传递给处理阶段2的异步方法.

这是一个示例决策代码.stage1()并行执行三个活动并调用异步方法stage2(@Wait List<Promise<Void>> promiseList).除非promiseList中的所有promise都得到满足,即除非stage1中的所有三个活动都已完成,否则不会启动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();
}
Run Code Online (Sandbox Code Playgroud)