【发布时间】:2015-09-21 05:43:22
【问题描述】:
我认为我遇到了一个不寻常的问题,我正在寻求调试帮助。
问题:
尽管 AWS SWF 控制台显示活动返回了有效响应,但 Flow Framework 永远不会将承诺标记为就绪!例如。在下面的代码中,“activities.nextTask”从未计划执行。
“activities.nextTask”计划执行的唯一时间是如果结果是一个空列表!
工作流程代码:
@Override
public void myworkflow() {
Promise<List<ValidationError>> result = activities.validate(input);
handleValidationResult(result);
Promise<Void> nextResult = activities.nextTask(input, result);
}
@Asynchronous
public void handleValidationResult(Promise<List<ValidationError>> result) {
System.out.println("WHY ISN'T THIS BEING EXECUTED?");
}
ValidationError 看起来像这样(使用 lombok):
@Value
public class ValidationError {
String message;
boolean isRetryable;
}
【问题讨论】:
-
值得注意的是,我验证了两个具有相同值的 ValidationError 实例相等(使用 .equals())。另外值得注意的是,具有相同值的两个 ValidationError 列表是相等的。我检查了这一点,以防 Flow 重播依赖于结果的相等性来保持一致。就我而言,它们是一致的。
-
代码看起来没问题,但可能是活动完成后工作流任务从未执行。确保在报告活动完成后启动工作流任务。如果它已启动但未能产生正确的结果,我建议使用 docs.aws.amazon.com/amazonswf/latest/awsflowguide/… 中描述的 WorkflowReplayer 在调试器中运行您的代码。
-
工作流任务在活动完成后调度并执行。我发现了问题并发布了答案。 Jackson 需要一个无参数构造函数,而我没有给它一个 :)
标签: java amazon-web-services amazon-swf