Тайм-аут в функции активности долгосрочных функций Azure
В своей функции деятельности я делаю это
do {
await timeout(500);
} while (await getStatus() === false);
где,
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
getStatus()
это функция, которая делает get
запрос, чтобы увидеть, завершен ли процесс в другой службе или нет, и возвращает true
или же false
основываясь на этом.
Мне нужна функция активности, чтобы дождаться завершения процесса в другом сервисе. Но выполнение функции активности по умолчанию ограничено 5 минутами. мой getStatus()
возврат может занять более 2-3 часов в зависимости от сценария true
,
Что я могу сделать здесь? Любой совет?
1 ответ
У вас есть несколько вариантов:
Вариант A: Использовать шаблон монитора + перемотка
Не могли бы вы разделить getStatus
код для другой функции деятельности вместо? Если да, то предположим следующее:
ActivityFunction_A
- содержит код перед циклом do-while, который опрашиваетgetStatus()
ActivityFunction_B
- содержит код, который опрашиваетgetStatus
с максимальным временем исполнения 10 минут.ActivityFunction_C
- содержит код послеgetStatus
возвращаетсяTRUE
Теперь вы можете организовать последовательность рабочих процессов
ActivityFunction_A => ActivityFunction_B => ActivityFunction_C
используя шаблон монитора.
Так как любая из функций деятельности может завершиться сбоем или истечет время ожидания, и при выполнении каждой функции действия могут возникнуть побочные эффекты, вам также следует использовать функцию перемотки (в настоящее время в режиме предварительного просмотра), чтобы перематывать и воспроизводить только начиная с первой сбойной функции деятельности в последовательность.
Вариант Б: использовать план обслуживания приложения
Если ваш рабочий процесс не нуждается в динамическом масштабировании до большого количества экземпляров, вы можете перенести свои функции в план обслуживания приложения с включенным AlwaysOn.