繁体   English   中英

FixedDelayRetry 属性 on Azure Function 不能正常工作

[英]FixedDelayRetry attribute on Azure Function doesn't work properly

自最新的 Microsoft.Azure.WebJobs 程序集发布以来,现在可以通过[FixedDelayRetry]等属性设置 Azure Function 的重试策略。 我对这个功能很感兴趣,因为我有一个Blob Trigger Function,失败时默认重试五次,我对重试策略功能不感兴趣。 我希望 function 在失败时不重试,或者只重试一次。

所以我在我的 function 中设置了这个属性,如下所示,并指出了 function 失败时的最大重试次数:

public class Function1
{
    private readonly IGremlinService _gremlinService;
    private readonly TelemetryClient _telemetryClient;

    public Function1(IGremlinService gremlinService, TelemetryConfiguration telemetryConfiguration)
    {
        this._gremlinService = gremlinService;
        this._telemetryClient = new TelemetryClient(telemetryConfiguration);
    }

    [FunctionName(nameof(Function1))]
    [FixedDelayRetry(1, "00:00:10")]
    public async Task Run([BlobTrigger("files/{directory}/{name}.pdf", Connection = "AzureWebJobsStorage")] Stream myBlob, string name, ILogger logger)
    {
        try
        {
            //my lengthy code not related to the issue
        }
    }
    }   

当我在我的测试环境中使用存储模拟器和我的 CosmosDb 模拟器尝试这段代码时,它工作得很好,function 在遇到异常时只重试一次。

但是,当我在 Azure 平台上运行我的 function 时,它不是只在失败时重试一次,而是重试……九次。 我将最大重试次数设置为 5,这次 function 重试了 25 次。 我的感觉是,function 没有重试属性中指定的次数,而是将该数字乘以默认重试策略 5。在下面您可以看到我的日志,其中 function 显然重试了 10 次:

在此处输入图像描述

我究竟做错了什么?

function 应用程序重试策略独立于触发器提供的任何重试或弹性。 function 重试策略只会叠加在触发弹性重试之上。 您可以在此处阅读有关重试行为的信息。

由于 Azure Blob 将 maxDequeueCount 设置为 5(阅读此处),这就是您看到您的消息被多次重试的原因。

要获得所需的结果,您可以将 host.json 中的 maxDequeueCount 属性定义为 1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM