Очередь хранилища Azure — реализация механизма повторных попыток

#azure-storage #lazy-loading #lazy-initialization #azure-storage-queues #retrypolicy

#azure-хранилище #отложенная загрузка #отложенная инициализация #azure-storage-queues #политика повторных попыток

Вопрос:

Я использую пакет nuget «Microsoft.Azure.Хранение.Queue» Version =»11.1.7″ для создания клиента очереди хранилища Azure, как показано ниже,

 AsyncLazy<CloudQueue> qClient = new AsyncLazy<CloudQueue>( async () =>
    {
        var myStorageAccount = CloudStorageAccount.Parse("ConnectionString");
        var myQueue = myStorageAccount .CreateCloudQueueClient()
            .GetQueueReference("QueueName");
        await myQueue.CreateIfNotExistsAsync();
        return myQueue;
    });
  

Хотелось бы включить механизм повторных попыток для устранения любой временной ошибки при отправке сообщения в очередь через указанный выше экземпляр ‘qClient’.

Как включить механизм повторных попыток в описанный выше способ создания отложенного подключения к очереди?

Ответ №1:

Вы можете обратиться к этому официальному документу, и вы можете использовать CloudBlobClient .Свойство DefaultRequestOptions

Я пишу пример кода, возможно, он может вас вдохновить:

             AsyncLazy<CloudQueue> qClient = new AsyncLazy<CloudQueue>(async () =>
            {
                var myStorageAccount = CloudStorageAccount.Parse("ConnectionString");
                var myQueue = myStorageAccount.CreateCloudQueueClient();
                myQueue.DefaultRequestOptions = new QueueRequestOptions
                {
                    RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(3), 4),
                    // For Read-access geo-redundant storage, use PrimaryThenSecondary.
                    // Otherwise set this to PrimaryOnly.
                    LocationMode = LocationMode.PrimaryThenSecondary,
                    // Maximum execution time based on the business use case.
                    MaximumExecutionTime = TimeSpan.FromSeconds(20)
                };
                var queue = myQueue.GetQueueReference("QueueName");
                await queue.CreateIfNotExistsAsync();
                return queue;
            });