#c# #.net #azure #azure-functions
#c# #.net #azure #azure-функции
Вопрос:
Я пишу функцию Azure для отправки сообщений на служебную шину, которая приведена ниже. Согласно документации, существует встроенная политика повторных попыток, которая повторит попытку 5 раз, если служебная шина вернет временное исключение. Я хочу написать один оператор журнала в случае любого из этих двух сценариев:
- возникает нестационарная ошибка
- возникает временная ошибка, но все попытки из политики повторных попыток завершились неудачей.
В случае временного исключения будет ли выполняться мой оператор 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