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

使用最新的(在撰写本文时为12.3.0Nuget 包用于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 存储操作设置重试策略?

【问题讨论】:

标签: c# azure .net-core azure-blob-storage


【解决方案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 中提出问题,可能是这个问题的更好地方
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 2022-07-11
  • 2017-09-24
  • 2022-08-02
相关资源
最近更新 更多