【问题标题】:How can I log a message in an azure function after the built-in retry policy fails?内置重试策略失败后,如何在 azure 函数中记录消息?
【发布时间】:2020-10-12 16:04:22
【问题描述】:

我正在编写一个 azure 函数来将消息发送到下面的服务总线。 According to the documentation,有一个内置的重试策略,如果服务总线返回一个瞬态异常,将重试 5 次。如果出现以下两种情况,我想写一条日志语句:

  1. 发生非暂时性错误
  2. 发生暂时性错误,但重试策略的所有重试均失败。

在暂时异常的情况下,我的日志语句是否会在重试策略完成的每次重试时执行?还是重试策略尝试五次后重新抛出异常,让我的自定义日志语句重试后只执行一次?

[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"); }
    }
}

【问题讨论】:

    标签: c# .net azure azure-functions


    【解决方案1】:

    您的代码将在每次重试时记录一个错误。

    无法处理的消息(所有重试均失败)将被移至死信队列。

    因此,如果您想在所有退休失败后执行一些工作负载,您可以创建单独的函数并将其订阅到死信队列。 死信队列的路径如下:

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

    请在此处阅读更多信息:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues#path-to-the-dead-letter-queue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 2015-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多