【问题标题】:Azure Function Blob Trigger Retry CountAzure 函数 Blob 触发器重试计数
【发布时间】:2020-08-07 01:42:07
【问题描述】:

我遇到的情况是,blob 第一次可能无法处理,但可能会在后续执行中起作用。

我遇到的问题是围绕监控真正的失败,目前第一次失败将引发异常,该异常会被记录并发出警报,但如果第一次重试成功完成,则根据之前的警报无事可做。

有没有办法查看已经发生的重试次数,这样我只能在不再重试时发出警报?

【问题讨论】:

  • 默认为 5,尝试将 maxDequeueCount 设置为 1.docs.microsoft.com/en-us/azure/azure-functions/…
  • 我要重试,我只想在基本第5次失败时抛出异常。
  • 您不能只跟踪获取 blob 文件的方法中的重试次数,然后在超过阈值时记录并发出警报吗?
  • 每次执行都会被触发并独立运行,因此我正在寻找一种方法来保持对 blob 进行了多少次尝试。
  • BlobTrigger 函数的替代方法是使用具有更可靠的事件传递处理、重试策略和死信的 Azure 事件网格,请参阅docs.microsoft.com/en-us/azure/event-grid/delivery-and-retry 中的更多详细信息

标签: c# azure azure-functions azure-blob-storage azure-blob-trigger


【解决方案1】:

您可以更改函数处理程序以检索消息元数据,包括出队计数。

Retrieving queue metadata from an Azure Storage Queue Trigger

[FunctionName("QueueTriggerMetadata")]
public static void Run([QueueTrigger("101functionsqueue", Connection = "AzureWebJobsStorage")]CloudQueueMessage myQueueItem, TraceWriter log)
{
    log.Info("101 Azure Function Demo - Retrieving Queue metadata");

    log.Info($"Queue ID: {myQueueItem.Id}");
    log.Info($"Queue Insertion Time: {myQueueItem.InsertionTime}");
    log.Info($"Queue Expiration Time: {myQueueItem.ExpirationTime}");
    log.Info($"Queue Payload: {myQueueItem.AsString}");

    log.Info($"Dequeue Count: {myQueueItem.DequeueCount }");
}

话虽如此,您可能仍想使用中毒队列来处理失败的消息,就像 Mike 在他的回答中建议的那样。这取决于您的具体情况。

【讨论】:

    【解决方案2】:

    在 Blob 触发器函数最后一次失败后,Azure 应将消息写入名为 webjobs-blobtrigger-poison 的存储队列。您可以监控此存储队列中是否有新消息,以在重试次数用尽后监控实际故障。

    见:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=csharp#poison-blobs

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 2021-03-26
      • 2018-08-29
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多