我正在测试带有流库的取消工作流逻辑。该代码取消了决策者代码中的工作流,但引发了IncompatibleWorkflowDefinition
com.amazonaws.services.simpleworkflow.flow.worker.IncompatibleWorkflowDefinition: Unknown DecisionId [type=EXTERNAL_WORKFLOW, id=735]The possible causes are nondeterministic workflow definition code or incompatible change in the workflow defini
tion.
我不明白为什么它会破坏逻辑。有人可以解释为什么它使工作流变得不确定吗?代码如下所示
@Override
public void dosomething(final Input input) {
checkInput();
cancelCurrentWorkflow();
asyncMethod();
}
private cancelCurrentWorkflow() { contextProvider.getDecisionContext().getWorkflowClient().requestCancelWorkflowExecution(contextProvider.getDecisionContext().getWorkflowContext().getWorkflowExecution());}
@Asynchronous
asyncMethod()
答案 0 :(得分:1)
取消工作流程本身没有任何意义。通常是使用SWF requestCancelWorkflowExecution API从外部调用的操作。
如果您需要取消工作流程代码的某些部分,请使用TryCatchFinally。cancel方法。
顺便说一句。您是否知道Cadence Workflow是SWF的开源版本?它具有对开发人员更友好的Java client,不使用代码生成和AspectJ。它还允许在工作流程中编写阻止同步代码。