Тайм-аут в функции активности долгосрочных функций 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 код для другой функции деятельности вместо? Если да, то предположим следующее:

  1. ActivityFunction_A - содержит код перед циклом do-while, который опрашивает getStatus()

  2. ActivityFunction_B - содержит код, который опрашивает getStatus с максимальным временем исполнения 10 минут.

  3. ActivityFunction_C - содержит код после getStatus возвращается TRUE

Теперь вы можете организовать последовательность рабочих процессов

ActivityFunction_A => ActivityFunction_B => ActivityFunction_C

используя шаблон монитора.

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

Вариант Б: использовать план обслуживания приложения

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

Другие вопросы по тегам