Тайм-аут в функции активности долгосрочных функций Azure - PullRequest
0 голосов
/ 20 декабря 2018

В своей функции активности я делаю это

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 Ответ

0 голосов
/ 21 декабря 2018

У вас есть несколько вариантов:

Опция A: Использовать шаблон монитора + перемотка назад

Не могли бы вы вместо этого разделить код getStatus на другую функцию деятельности?Если да, то предположим следующее:

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

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

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

Теперь вы можете управлять последовательностью рабочего процесса

ActivityFunction_A => ActivityFunction_B => ActivityFunction_C

с использованием шаблона Monitor .

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

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

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

...