【问题标题】:Can I trust Azure Blob RetryPolicy? Why I cannot find these retry requests in fiddler我可以信任 Azure Blob RetryPolicy 吗?为什么我在提琴手中找不到这些重试请求
【发布时间】:2016-07-15 09:25:55
【问题描述】:

我尝试从一个空的 blob 容器下载文件,结果如预期的那样得到 404。问题是我在提琴手中只看到 1 次调用此文件,而不是 3 次(正如我在 RetryPolicy 中指定的那样),我还注意到调用在 1 秒内完成,所以它肯定没有等待 10 秒再试一次。 .. 我怎么知道 BlobClient 是否真的重试了?

var blobClient = this.storageAccount.CreateCloudBlobClient(); blobClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(10), 3); var anchorString = await cloudBlobContainer.GetBlockBlobReference(ARGO_ANCHOR_VERSION_FILE).DownloadTextAsync();

【问题讨论】:

    标签: c# azure azure-blob-storage retrypolicy


    【解决方案1】:

    问题是我在提琴手中只看到 1 次调用此文件,而不是 3(正如我在 RetryPolicy 中指定的)

    这是预期行为,因为默认重试策略(线性、指数等)不会重试所有操作。 重试策略用于处理transient 错误。您提到您收到 404 (Not Found) 错误,这不是可重试的操作,因为它不是暂时性错误。通常状态码 500+ 的错误默认是可以重试的。

    但是,您可以创建自定义重试策略并使任何错误代码可重试。我很久以前写了一篇关于重试策略的博客文章,在那里我写了一些用于创建自定义重试策略的代码。您可以创建一个自定义重试策略,将 404 错误视为暂时性错误,然后您应该会看到存储客户端库正在重试您的操作。您可以在此处阅读该帖子:http://gauravmantri.com/2012/12/30/storage-client-library-2-0-implementing-retry-policies/

    【讨论】:

    • 感谢您的解释!我看到了 StorageException.IsRetryable = true 这个异常,这很令人困惑
    • 看看这里的代码:github.com/Azure/azure-storage-net/blob/master/Lib/Common/…。基于此,IsRetryable 仅在 ArgumentException 的情况下设置为 false(例如,您提供了无效的 blob 容器名称)。 HTH。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多