1

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

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

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

4

2 回答 2

1

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

从 Azure 存储队列触发器中检索队列元数据

[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 在他的回答中建议的那样。这取决于您的确切情况。

于 2020-08-06T17:42:07.153 回答
0

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

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

于 2020-08-06T16:20:26.163 回答