IncompatibleWorkflowDefinition при отмене выполнения рабочего процесса - PullRequest
0 голосов
/ 20 сентября 2019

Я тестирую логику отмены рабочего процесса с помощью библиотеки потоков.Код отменяет рабочий процесс в решающем коде, но выдает 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()

1 Ответ

0 голосов
/ 24 сентября 2019

Отмена рабочего процесса сама по себе не имеет смысла.Обычно это операция, вызываемая извне с использованием API SWF requestCancelWorkflowExecution .

Если вам нужно отменить определенную часть кода рабочего процесса, используйте TryCatchFinally .cancel метод.

Кстати.Знаете ли вы о Cadence Workflow , который является реинкарнацией SWF с открытым исходным кодом?Он имеет гораздо более дружественный для разработчика Java-клиент , который не использует генерацию кода и AspectJ.Это также позволяет писать блокирующий синхронный код внутри рабочего процесса.

...