Azure存储队列-重试机制实现

问题描述

我使用nuget包“ Microsoft.Azure.Storage.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”实例将消息发布到队列中时,采用重试机制来克服任何瞬时故障。

如何通过上述创建延迟队列连接的方式合并重试机制?

解决方法

您可以参考此official document,并且可以使用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;
            });

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...