Задержка повтора функции с триггером очереди Azure ServiceBus

У меня есть функция Azure, которая запускается очередью служебной шины. Если функция завершается сбоем, она немедленно повторяется (через 1 с) до 10 раз. Однако я хотел бы повторять попытку каждые пять минут. Даже после прочтения документации мне было неясно, как это должно быть реализовано.

[Function("Foo")]
public async Task Run(
  ServiceBusTrigger("FooQueue",
  Connection = "ServiceBusConnection")]
  Foo foo,
  int deliveryCount,
  DateTime enqueuedTimeUtc,
  string messageId)

В документации говорится, что поведение повторной попытки можно настроить в файле host.json. Однако там также говорится, что настройки clientRetryOptions применяются только к взаимодействию со службой служебной шины. Они не влияют на повторные попытки выполнения функций.

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

Каков «официальный» способ реализации стратегии повторных попыток? Предполагается ли это реализовать в самой функции, используя задержки типа Task.Delay вместе с параметром DeliveryCount?


53
1

Ответ:

Решено

Как вы уже узнали, триггер служебной шины может выполнять немедленные повторные попытки только с помощью MaxDeliveryCount. Отложенные повторы не поддерживаются ни пакетом SDK для функций, ни служебной шиной Azure.

Для отложенных повторных попыток с функциями изолированного Worker SDK вы можете реализовать собственное решение, доступное с помощью опции промежуточного программного обеспечения, которую поддерживает новый Functions SDK. Я изложил эту идею в блоге . Версия TLDR предназначена для использования счетчика доставки для немедленных повторных попыток и выдачи клонированного сообщения для отложенных повторных попыток, используя заголовки сообщений для отслеживания повторных попыток.