如何解决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的一个重大改进版本,它支持同步编程而无需执行所有这些繁琐的任务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。