Java AWS SWF-工作流传递活动结果,信号驱动工作流

Java AWS SWF-工作流传递活动结果,信号驱动工作流,java,amazon-web-services,amazon-swf,Java,Amazon Web Services,Amazon Swf,我需要使用AWS简单工作流(SWF)进行编排类型的系统设计。有一个父应用程序正在启动此子工作流,然后向工作流发送信号以处理活动。我有一个工作流,它启动并等待信号发生,然后才能开始执行活动工作。完成一项活动后,它将通过关闭父工作流上的活动向报告 我如何等待信号并使用信号调用的另一个活动的结果 我是否需要查看活动结果的执行历史,而不依赖于在Decise中执行此工作 谢谢你的帮助 代码示例: @SuppressWarnings("unused") @Slf4j public cla

我需要使用AWS简单工作流(SWF)进行编排类型的系统设计。有一个父应用程序正在启动此子工作流,然后向工作流发送信号以处理活动。我有一个工作流,它启动并等待信号发生,然后才能开始执行活动工作。完成一项活动后,它将通过关闭父工作流上的活动向报告

我如何等待信号并使用信号调用的另一个活动的结果

我是否需要查看活动结果的执行历史,而不依赖于在Decise中执行此工作

谢谢你的帮助

代码示例:

@SuppressWarnings("unused")
@Slf4j
public class ChildWorkflowImpl implements ChildWorkflow {
    private final Settable<Message> firstStepReceived = new Settable<>();
    private final Settable<Message> secondStepReceived = new Settable<>();


    @Autowired
    private FirstActivityClient firstActivityClient;

    @Autowired
    private SecondActivityClient secondActivityClient;


    @Autowired
    private AmazonSimpleWorkflow amazonSimpleWorkflow;

    @Override
    public void startWorkflow(SubsystemMessage subsystemMessage) {

        //wait for signal to start
        new Task(firstStepReceived) {
            @Override
            protected void doExecute() throws Throwable {
                //Initiate Activity

                startStage(firstStepReceived.get(););
            }
        };

        //wait for second signal but pass in data from first activity
        new Task(secondStepReceived) {
            @Override
            protected void doExecute() throws Throwable {

            }
        };


    }

    public void firstStep(Message message) {
        Promise<FirstActivityResponse> firstActivity = firstActivityClient.execute();

        //wait for signal for disable
        new Task(firstActivity) {
            public void doExecute() {
                //report back status for stage by closing parent activity
            }
        };
    }

    public void secondStep(FirstActivityResponse response) {
        Promise<SecondActivityResponse> secondActivityResponse = secondActivityClient.execute(response);

        new Task(secondActivityResponse) {
            public void doExecute() {
                //report back status for stage
            }
        };

    }
}
@SuppressWarnings(“未使用”)
@Slf4j
公共类ChildWorkflowImpl实现ChildWorkflow{
private final Settable firstStepReceived=新可设置();
private final Settable secondStepReceived=新可设置();
@自动连线
private FirstActivityClient FirstActivityClient;
@自动连线
私人SecondActivityClient SecondActivityClient;
@自动连线
私有AmazonSimpleWorkflow AmazonSimpleWorkflow;
@凌驾
公共无效startWorkflow(子系统消息子系统消息){
//等待信号开始
新任务(firstStepReceived){
@凌驾
受保护的void doExecute()抛出可丢弃的{
//发起活动
startStage(firstStepReceived.get(););
}
};
//等待第二个信号,但从第一个活动传入数据
新任务(已收到第二步){
@凌驾
受保护的void doExecute()抛出可丢弃的{
}
};
}
公共无效第一步(消息){
Promise firstActivity=firstActivityClient.execute();
//等待禁用的信号
新任务(第一个活动){
公共void doExecute(){
//通过关闭父活动报告阶段的状态
}
};
}
公共无效第二步(第一个活动响应){
Promise secondActivityResponse=secondActivityClient.execute(响应);
新任务(第二个活动响应){
公共void doExecute(){
//报告阶段的状态
}
};
}
}

将信号方法添加到工作流界面,并使用Settable将信号通知工作流代码的其他部分。请参阅第页的可设置文档

顺便说一句,我建议看看哪一个是SWF的一个大大改进的版本,它支持同步编程,而不需要所有这些烦人的任务