Предполагая, что у меня есть рабочий процесс:
Когда я делаю:
workflow.makeOrder();
это заблокирует, поэтому я не могу получить результат, пока не будут выполнены шаги 1-4.
Но если я сделаю это асинхронно:
WorkflowExecution workflowExecution = WorkflowClient.start(workflow::makeOrder);
workflowExecution.getWorkflowId()
Я не могу получить результат шага 1. Как я могу его достичь?
В настоящее время (лето 2019 г.) мы работаем над добавлением прямой поддержки синхронного ожидания для определенного условия в коде рабочего процесса. Мы считаем, что в третьем квартале 2019 года он будет готов к производству.
До тех пор самым простым решением является использование функции запроса для возврата состояния рабочего процесса. См. пример HelloQuery. Основной недостаток этого решения в том, что клиент должен опрашивать рабочий процесс до тех пор, пока состояние не будет обновлено, чтобы отразить результат шага 1.
Если вам нужно обеспечить низкую задержку ответа, рекомендуемый шаблон для выполнения запроса/ответа в экземпляре рабочего процесса:
CompletableFuture
и вставляет его в карту, используя requestId в качестве ключа. Затем запрашивающий поток блокируется на этом Future.get
.CompletableFuture
, что исходный запрошенный поток заблокирован, и завершает его с результатом запроса, полученным в качестве другого аргумента действия.Создайте заглушку локальной активности с помощью Workflow.newLocalActivityStub и вызовите для нее метод активности.
> ответьте, что рабочий процесс вызывает локальное действие по доставке результата: есть ли какое-нибудь руководство о том, как это сделать?