AWS SWF-工作流传递活动结果并带有驱动工作流的信号

问题描述

我需要针对业务流程类型的系统设计使用AWS Simple Workflow(SWF)。有一个父应用程序正在启动此子工作流程,然后向工作流程发出信号以进行活动。我有一个工作流,它会启动并等待信号发生,然后才能开始进行活动工作。完成一项活动后,它将通过关闭父工作流程中的活动来向后报告。

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

我是否需要查看活动结果的执行历史记录,而不必在决策中依赖此工作?

感谢您的帮助

代码示例:

@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
            }
        };

    }
}

解决方法

您将信号方法添加到工作流界面,并使用Settable通知工作流代码的其他部分有关信号的信息。请参见this documentation页面上的可设置文档。

顺便说一句。我建议您查看temporal.io,它是SWF的一个重大改进版本,它支持同步编程而无需执行所有这些繁琐的任务。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...