如何使用 Azure.Storage.Blobs 程序集对 Azure Blob 存储操作设置重试策略?

Posted

技术标签:

【中文标题】如何使用 Azure.Storage.Blobs 程序集对 Azure Blob 存储操作设置重试策略?【英文标题】:How do I set a retry policy on an Azure blob storage operation using the Azure.Storage.Blobs assembly? 【发布时间】:2020-06-17 08:47:21 【问题描述】:

使用最新的(在撰写本文时为12.3.0)Nuget 包用于Azure.Storage.Blobs 程序集,并与BlobServiceClient 类异步上传,我想设置重试选项以防暂时失败。

但是UploadAsync() 方法中的overload 不接受任何带有重试选项的对象:

UploadAsync(Stream, BlobHttpHeaders, IDictionary<String,String>, BlobRequestConditions, IProgress<Int64>, Nullable<AccessTier>, StorageTransferOptions, CancellationToken)

虽然在创建BlobServiceClient 时,可以设置BlobClientOptions,并且这些确实从抽象基类ClientOptions 继承了RetryOptions 字段,但该字段是只读的:

    // Summary:
    // Gets the client retry options.
    public RetryOptions Retry  get; 

如何使用Azure.Storage.Blobs 程序集对 Azure blob 存储操作设置重试策略?

【问题讨论】:

这个问题已经解决了,我添加了API参考链接。 - BlobClientOptions Class (Azure.Storage.Blobs) - Azure for .NET Developers | Microsoft Docs 【参考方案1】:

您应该在创建 blob 客户端时指定重试部分。这是一个示例:

    var options = new BlobClientOptions();
    options.Diagnostics.IsLoggingEnabled = false;
    options.Diagnostics.IsTelemetryEnabled = false;
    options.Diagnostics.IsDistributedTracingEnabled = false;
    options.Retry.MaxRetries = 0;

    var client = new BlobClient(blobUri: new Uri(uriString:""), options: options);

另外,可以在创建BlobServiceClient时设置BlobClientOptions

var blobServiceClient = new BlobServiceClient
(connectionString:storageAccountConnectionString, options: options );

然后,您可以使用 BlobServiceClient.GetBlobContainerClient(blobContainerName:"")BlobContainerClient.GetBlobClient(blobName:"") 以一致的方式构建 blob URI,并带有选项。

【讨论】:

我如何知道重试是否真的发生了?有没有办法在重试发生时记录信息? 据我所知,没有“标志”:github.com/Azure/azure-sdk-for-net/blob/…您可以在 github 中提出问题,可能是这个问题的更好地方

以上是关于如何使用 Azure.Storage.Blobs 程序集对 Azure Blob 存储操作设置重试策略?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件

如何从 Azure.Storage.Blobs 模拟 GetBlobsByHierarchy()?

Azure SAS 令牌不适用于 Azure.Storage.Blobs BlobServiceClient

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

VS2015 无法安装包 Azure.Storage.Blobs.12.5.1

无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储