Как воспроизведение истории работает в каденции?

Как воспроизведение истории работает в каденции?

У меня есть рабочий процесс, который последовательно вызывает два действия.

Скажем, первое действие завершено, а второе содержит 100 строк кода. Если сервер приложений перезагружается при выполнении 50-й строки кода в activity2, он точно начинает выполнение с 50-й строки. Если да, то какая магия происходит внутри каденции?

@Override
    public String composeGreeting(String greeting, String name) throws Exception {
      FileWriter fw =
          new FileWriter(
              "/Users/kumble-004/Documents/Uber_Cadence/Sample_Projects/TestCadence/src/com/company/"+name+".txt");

      System.out.println(
          DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now())
              + " [Activity] started");

      long time = System.currentTimeMillis() + 240000;
      int i = 0, j=1;

      while (System.currentTimeMillis() != time) {
        if(i++ %10000000 == 0) {
          fw.write("print - " + j++ + " " +
                  DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now()) +"\n");
        }
      }
      fw.close();
      System.out.println(
          DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now())
              + " [Activity] ended");

      return greeting + " " + name + "!";
    }
  }

У меня есть приведенный выше код в моем приветственном действии. этот код будет работать в течение 4 минут и будет записывать данные в файл, когда выполняется условие

Я запустил рабочий процесс и покинул сервер каденции после печати [Activity] started. Я не начинал, это просто останавливает. Но через 4 минуты в консоли точно печатается [Activity] Ended. Мне интересно, как это возможно, потому что я останавливаю сервер, но код выполняется, данные записываются в файл.

Пока я проверяю его через пользовательский интерфейс каденции, он показывает, что последняя история - ActivityTaskStarted. И я запустил свой сервер. Через 15 минут (например, scheduleToCloseTimeoutSeconds - 15 минут) активность возвращается с событием ActivityTaskTimedOut, и весь whorkflow завершился неудачно из-за этого тайм-аута.

Пожалуйста, объясните, что происходит при перезапуске сервера каденции?


person Anil Kumble    schedule 16.05.2021    source источник


Ответы (1)


Если сервер приложений перезагружается при выполнении 50-й строки кода в activity2, точно ли он начинает выполнение с 50-й строки

Нет, он не возобновится автоматически с 50-го направления деятельности.

Воспроизведение происходит только для рабочего процесса. Он обращается к истории, чтобы воспроизвести и перестроить стек памяти. Все, что происходит в рабочем процессе, сохраняется в истории:

  • Каждый шаг в коде рабочего процесса генерирует набор результатов, называемых Решением.
  • Результаты деятельности / ChildWorkflow
  • Внешние события, такие как сигналы
  • Таймеры
  • И т.п.

Для получения дополнительных сведений см. документ об истории воспроизведения. и Что такое задача принятия решения Cadence? < / а>

Но через 4 минуты точно печатает [Activity] Ended в консоли. Мне интересно, как это возможно, потому что я останавливаю сервер, но код выполняется, данные записываются в файл.

Это потому, что ваш рабочий процесс все еще работает. Код, который вы выполняете, представляет собой чисто код активности.

Однако результаты его активности не будут отправлены на сервер, когда сервер не работает. Это означает, что история будет потеряна, и рабочий процесс может перенести другое действие (если включена повторная попытка).

См. документ о тайм-ауте активности и повторной попытке

person Long Quanzheng    schedule 17.05.2021