Согласно эта почта,
Вот последовательность шагов для выполнения рабочего процесса одного действия.
- Запущен рабочий процесс, который добавляет задачу рабочего процесса в задачу рабочего процесса.
очередь.
- Задача рабочего процесса получена работником рабочего процесса, который слушает
очередь задач рабочего процесса.
- Задача рабочего процесса завершается командой ScheduleActivityTask.
- Задача активности добавляется в очередь задач активности.
- Задача активности получена работником активности.
- Оперативная задача выполняется оператором активности.
- Задача рабочего процесса добавляется в очередь задач рабочего процесса.
- Задание рабочего процесса с результатом активности получает
рабочий рабочий процесс.
- Задача рабочего процесса завершена с помощью CompleteWorkflowExecution
команда.
Вот последовательность шагов для выполнения локального действия.
- Запущен рабочий процесс, который добавляет задачу рабочего процесса в задачу рабочего процесса.
очередь.
- Задача рабочего процесса получена работником рабочего процесса, который слушает
очередь задач рабочего процесса.
- Рабочий процесс планирует локальную задачу активности во внутрипроцессном локальном
очередь задач активности.
- Локальная активность выполняется локальным рабочим, который слушает
в очередь задач локальной активности внутри процесса.
- Задача локальной активности возвращается в рабочий процесс.
- Задача рабочего процесса завершена с помощью RecordMarker и
CompleteWorkflowExecution
команды. Команда маркера содержит
результат выполнения локальной деятельности.
Ограничения местных мероприятий:
- Работает только для коротких действий, которые не выходят за рамки рабочего процесса.
Тайм-аут задачи. Это означает, что сердцебиение не поддерживается для
местные мероприятия.
- Это неэффективно для долгих попыток. Нормальная деятельность может быть
повторять практически бесконечно.
- Локальная активность хотя бы раз имеет семантику как сбой рабочего процесса.
задача приведет к их повторному выполнению.
- Локальная активность расширяет выполнение задач рабочего процесса. Пока задача
при работе он не может реагировать на сигналы. Таким образом, увеличивается задержка для
обработка сигналов.
Предупреждение от @Максим
We’ve seen multiple cases when use of local activities without
understanding their limitations caused various production issues. So
my advice is to stick to normal activities unless your use case
requires very high throughput and large activity fan outs of very
short activities.
Пример кода java-sdk:
private final RetryOptions retryOptions = RetryOptions.newBuilder()
.setInitialInterval(Duration.ofSeconds(1))
.setMaximumInterval(Duration.ofSeconds(10))
.setBackoffCoefficient(2.0)
.setMaximumAttempts(3)
.build();
private final LocalActivityOptions laOptions =
LocalActivityOptions.newBuilder()
.setRetryOptions(retryOptions)
.setStartToCloseTimeout(Duration.ofSeconds(10))
.build();
private final Account acc = Workflow.newLocalActivityStub(Account.class, laOptions);