Azure функций singleton по триггеру таймера ... выполнение хранимой процедуры - PullRequest
0 голосов
/ 05 августа 2020

У нас есть Azure Функции, выполняющие хранимую процедуру каждые 2 секунды. В большинстве случаев в 90% случаев хранимая процедура завершается sh менее чем за 1 секунду. Но если json большой и имеет много значений, иногда он выполняется более 2 секунд. Я не хочу, чтобы функция Azure запускалась до тех пор, пока не будет завершена та, которая была запущена.

    [FunctionName("OrderOIHSync")]
    public static async Task RunSingle([TimerTrigger("*/2 * * * * *")]TimerInfo myTimer, ILogger log)

Правильный ли это подход или как я могу контролировать, поэтому в исключительных случаях функция azure не работает. t триггер. На основе документации триггер таймера говорит о синглтоне, но я видел случаи, когда он срабатывает и вызывает некоторые проблемы с данными.

Любые предложения приветствуются.

1 Ответ

0 голосов
/ 17 августа 2020

Функция триггера таймера не сработает снова, если еще выполняется невыполненный вызов. Для этого есть внутренний таймер. После того, как ваша функция завершает выполнение, при вызове функции таймер запускается снова. Таким образом, в любой момент времени будет запущен только один экземпляр вашей функции Azure.

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

Отметьте здесь

Теперь вы можете использовать свойство IsPastDue и соответственно контролировать выполнение . Флаг IsPastDue передается вашей функции azure, чтобы указать, был ли таймер просрочен или нет.

Свойство IsPastDue имеет значение true, если текущий вызов функции позже запланированного. Например, перезапуск приложения-функции может привести к пропуску вызова.

цитируется из здесь

{
"Schedule":{
},
"ScheduleStatus": {
    "Last":"2016-10-04T10:15:00+00:00",
    "LastUpdated":"2016-10-04T10:16:00+00:00",
    "Next":"2016-10-04T10:20:00+00:00"
},
"IsPastDue":false

} ​​

...