【发布时间】:2016-08-22 20:54:54
【问题描述】:
我有一个 SWF 工作流程和活动。下面是结构:
WorkflowClientImpl 类:
class TempWorkflowImpl() {
@Override
public void execute() {
new TryCatchFinallly {
@Override
protected void doTry() throws Throwable {
activityClient.invoke();
}
@Override
protected void doFinally() throws Throwable {
// Clean up code
}
@Override
protected void doCatch() throws Throwable {
// Handle Exception
}
}
}
}
ActivityClientImpl 类:
class TempActivityImpl() {
@Override
public void invoke() {
// Perform some logic
// Check if API call (API_Call_A) is made previously
// If not Invoke API_Call_A.
// If yes, throw exception
}
}
活动类调用一个异步方法的API。 API 调用中定义的操作大约需要一个小时才能完成。有时,由于某些原因,操作在执行时可能会失败。此 API 调用是在我无权访问的服务上定义的。 有没有一种方法可以让活动休眠,以便它可以在一个小时后检查操作是否成功。如果不成功,我将重新调用 API 调用。让我们假设这次操作会成功,并且我们不会陷入 API 调用尝试的无限循环。
Thread.sleep() 似乎是一种方式,但我不确定这是最合适的方式。我还发现我们可以使用
Promise<Void> timer = decisionContextProvider.getDecisionContext().getWorkflowClock().createTimer(TimeUnit.MINUTES.toSeconds(TimeinMinutes));
continueAsNew(timer);
要使用上述方法,我可以在 API 调用后从活动方法返回 TimeinMinutes 的值,然后在一小时后重新启动工作流。
上述方法最合适吗?或者有更好的方法吗?
谢谢
【问题讨论】:
标签: java amazon-web-services amazon-swf