Опрос для внешних переходов состояний в рабочих процессах Cadence
У меня есть рабочий процесс Cadence, в котором мне нужно опрашивать внешний интерфейс AWS API до перехода конкретного ресурса, что может занять некоторое время. Я предполагаю, что должен сделать каждый отдельный запрос 'checkStatus' активным, и чтобы рабочий процесс выполнял цикл сна / проверки. Однако это означает, что у меня может быть неограниченное количество вызовов активности в моей истории рабочего процесса. Это беспокоит? Есть ли лучший способ сделать это?
1 ответ
Это зависит от того, как часто вы хотите опросить.
Для нечастых опросов (каждую минуту или медленнее) используйте попытку на стороне сервера. Укажите RetryPolicy (или RetryOptions для Java) при вызове действия. В RetryPolicy укажите экспоненциальный коэффициент 1 и начальный интервал частоты опроса. Затем завершите работу, если опрашиваемый ресурс не готов, и сервер попытается повторить его до указанного интервала истечения срока действия политики повторных попыток.
Для очень частых опросов каждые несколько секунд или быстрее решение состоит в том, чтобы реализовать опрос внутри реализации действия в виде цикла, который опрашивает, а затем спит в течение интервала опроса. Чтобы обеспечить своевременный перезапуск операции опроса в случае сбоя / перезапуска работника, операция должна пульсировать на каждой итерации. Используйте соответствующий RetryPolicy для перезапуска такой неудачной деятельности.
В редком случае, когда опрос требует периодического выполнения последовательности действий или аргументы действий должны меняться между попытками, может использоваться дочерний рабочий процесс. Хитрость в том, что родитель не знает о том, что ребенок звонит продолжить как новый. Он только получает уведомление, когда ребенок завершает или терпит неудачу. Таким образом, если дочерний элемент выполняет последовательность действий в цикле, и вызовы продолжаются как новые, периодически на родительский элемент не влияют, пока дочерний элемент не завершится.