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