Триггер очереди функций Azure: как установить задержку для вывода сообщения из очереди

У меня есть функция Azure, которая прослушивает очередь Azure и, например, что-то не так. Он снова добавляет сообщение в очередь. Но по прошествии 5 раз сообщение будет перемещено в очередь подозрений.

Я хочу повторно добавить сообщение в очередь с задержкой. Например, повторите попытку через 1 час. Потому что моя функция Azure работает с внешним ресурсом, который сейчас может быть недоступен. Я вообще не хочу повторять попытку 5 раз в течение 10 секунд, я хочу повторить попытку через 1 час. Конечно, я пишу свою реализацию, но, вероятно, эта функция уже существует.


person Oleg Sh    schedule 27.01.2019    source источник
comment
это может помочь: stackoverflow.com/questions/50817971/ stackoverflow.com/questions/39648697/, также нашел: docs.microsoft.com/en-us/azure/azure-functions/. Взгляните на свойство visibilityTimeout host.json   -  person 4c74356b41    schedule 27.01.2019


Ответы (1)


@ 4c74356b41 указал правильный путь. host.json настройки очереди - это то, что вы ищете.

visibilityTimeout - это интервал времени между повторными попытками при сбое обработки сообщения. maxDequeueCount - количество попыток обработки сообщения перед перемещением его в опасную очередь.

{
    "version": "2.0",
    "extensions": {
        "queues": {
            "visibilityTimeout" : "01:00:00",
            "maxDequeueCount": 2
        }
    }
}

Если ваша функция v1, аналогично

{
    "queues": {
      "visibilityTimeout" : "01:00:00",
      "maxDequeueCount": 2
    }
}

Обновить

Поскольку проблема в основном заключается в изменении visibilityTimeout в соответствии с конкретной ситуацией, установка задержки CloudQueue.AddMessageAsync соответственно - единственный способ. На самом деле visibilityTimeout делает то же самое, но на уровне приложения-функции (вся очередь), поэтому в этом случае нам не нужно настаивать на этом.

person Jerry Liu    schedule 28.01.2019
comment
но он устанавливает одно значение для всех запросов, я хочу установить разные значения для каждого случая - person Oleg Sh; 28.01.2019
comment
@OlegSh То есть в каждом случае задержка выхода из очереди разная? Если это так, нам, возможно, придется полагаться на ваш собственный код реализации, конфигурация находится на уровне всего функционального приложения, которое не может быть изменено динамически. - person Jerry Liu; 28.01.2019
comment
да, мне нужна разная задержка в каждом случае (т.е. на месте, где внутренний сервер недоступен, я хочу повторить попытку через 1 час, но на месте, когда локальная БД не обновляется, через 5 минут) - person Oleg Sh; 28.01.2019
comment
@OlegSh Хм ... Думаю, установить задержку CloudQueue.AddMessageAsync в зависимости от ситуации - единственный выход. На самом деле visibilityTimeout делает то же самое, но на уровне приложения-функции (вся очередь), поэтому в этом случае нам не нужно настаивать на этом. - person Jerry Liu; 28.01.2019