SWF本身是否支持java框架中的手动暂停和恢复工作流功能?如果不是,有什么方法可以实现这个语义吗?
编辑:我实现了下面的例子,似乎正在进行初始测试。有没有什么可以打破这一点的。我的工作流程将长时间运行(约3-5小时),同一活动多次使用不同的参数。
import com.amazonaws.services.simpleworkflow.flow.annotations.Asynchronous;
import com.amazonaws.services.simpleworkflow.flow.core.Promise;
import com.amazonaws.services.simpleworkflow.flow.core.Settable;
public class GreeterWorkflowImpl implements GreeterWorkflow {
private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl();
Settable<Void> paused = new Settable<>();
public void greet() {
Promise<String> fs = getGreeting(0, operations.getName());
print(fs);
}
@Asynchronous
private Promise<String> getGreeting(int count, Promise<String> name)
{
if (count > 10)
return name;
return getGreeting(count, name, paused);
}
@Asynchronous
private Promise<String> getGreeting(int count, Promise<String> name, Settable<Void> paused) {
Promise<String> returnString = operations.getGreeting(name.get());
return getGreeting(count + 1, returnString);
}
@Asynchronous
private void print(Promise<String> finalString)
{
System.out.println("Final String is " + finalString.get());
}
// @Signal method
@Override
public void pause() {
paused = new Settable<>();
}
// @Signal method
@Override
public void resume() {
paused.set(null);
}
}发布于 2020-09-10 05:47:15
如果您收到多个恢复信号,您将再次设置暂停的可设置值(它已经准备好了),因此您可能会得到未处理的IllegalStateException
https://stackoverflow.com/questions/62112022
复制相似问题