Как я могу зарегистрировать сообщение в функции Azure после сбоя встроенной политики повторных попыток?

#c# #.net #azure #azure-functions

#c# #.net #azure #azure-функции

Вопрос:

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

  1. возникает нестационарная ошибка
  2. возникает временная ошибка, но все попытки из политики повторных попыток завершились неудачей.

В случае временного исключения будет ли выполняться мой оператор log для каждой повторной попытки, выполняемой политикой повторных попыток? Или политика повторных попыток выполняется пять раз, а затем повторно генерирует исключение, так что мой пользовательский оператор журнала выполняется только один раз после повторных попыток?

 [FunctionName("MessageLoader")]
[return: ServiceBus("%Topic_Name%", Connection = "Topic_Connection")]
public static async Task<TopicMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "domain/load-message")] HttpRequestMessage req)
{
    try
    {
        var stringRequestBody = await req.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<TopicMessage>(stringRequestBody);
    }
    catch
    {
        _log.LogError("Could not send message: "   customBusinessObject.custom_message"); }
    }
}
  

Ответ №1:

Ваш код будет регистрировать ошибку при каждой повторной попытке.

Сообщение, которое не удалось обработать (все попытки были неудачными), будет перемещено в очередь мертвых писем.

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

 <queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue
  

Пожалуйста, прочитайте больше информации здесь: https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues#path-to-the-dead-letter-queue