我正在编写一个 azure 函数来将消息发送到服务总线,如下所示。 According to the documentation ,有一个内置的重试策略,如果服务总线返回暂时性异常,将重试 5 次。我想在这两种情况中的任何一种情况下编写一条日志语句:
- 发生非暂时性错误
- 发生暂时性错误,但重试策略的所有重试均失败。
如果出现暂时性异常,我的日志语句是否会针对重试策略执行的每次重试执行?或者重试策略是否尝试五次然后重新抛出异常,以便我的自定义日志语句在重试后只执行一次?
[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"); }
}
}
最佳答案
您的代码将在每次重试时记录错误。
无法处理的消息(所有重试均失败)将被移至死信队列。
因此,如果您想在所有退出失败后执行一些工作负载,您可以创建单独的函数并将其订阅到死信队列。 死信队列的路径如下所示:
<queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue
关于c# - 内置重试策略失败后,如何在 azure 函数中记录消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64321364/