AWS SWF createTimer承诺不返回

时间:2014-07-28 22:04:37

标签: amazon-web-services amazon-swf

我想要一个循环,在每次迭代等待一段时间后。我正在尝试使用计时器来进行等待,但计时器永远不会返回,因此下面的代码只运行一次然后永远等待。当我删除计时器条件时,代码执行成功。没有错误,只是等待......

感谢任何帮助!

@override
public void doWorkflow() {
    validate("test", 1);
}

@Asynchronous
private void validate(String id, int retries, Promise<?>... waitFor) {
    Promise<Boolean> isValid = activityClient.validate(id);

    doWork(id, retries, isValid);
}

@Asynchronous
private void doWork(String id, int retries, Promise<Boolean> isValid) {
    if (!isValid.get()) {
        return;
    }

    Promise<Void> waitFor = decisionContext.getWorkflowClock().createTimer(5);

    validate(id, retries - 1, waitFor);
}

2 个答案:

答案 0 :(得分:2)

我正在使用Spring来设置应用程序。为了获得我正在使用

的决策背景
@Autowired
DecisionContext decisionContext

问题是在构建Workflow实现时我没有使用范围。解决方案是添加范围=&#34;工作流程&#34;属性:

<bean id="myWorkflow" class="com.example.myWorkflowImpl" scope="workflow">

执行此操作后,工作流历史记录开始显示TimerStarted事件。

答案 1 :(得分:0)

我没有看到您的代码有任何明显问题。首先,我将查看工作流程历史记录(通过控制台或使用WorkflowExecutionHistoryPrinter打印)以查看计时器是否已安排以及是否会触发。如果历史记录看起来没问题,我会使用WorkflowExecutionFlowThreadDumper获得“异步线程转储”以查看您的代码究竟在等待什么。