0

我正在尝试使用 Azure Queues 的 v12 SDK。

当我创建队列实例时,我在应用程序启动时要做的第一件事就是查看队列是否存在。基于典型的文档示例

// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["storageConnectionString"];

// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, "myqueue");

// Create the queue
queueClient.CreateIfNotExists();

这很好.. 但是.. 如果代码无法访问队列存储(例如,错误的连接字符串/本地主机存储模拟器尚未 100% 启动等).. 那么它会挂起很长时间.. 在我的 Polly 之前代码启动它的“重试策略”。

问题:

  • 有没有办法让客户端在 5 秒后失败/退出,而不是让我等待 30 或 60 秒(就像这是一些默认设置,深入人心)。
  • 客户端会自动重试吗?如果是,这意味着我不需要我的 polly 代码...
4

1 回答 1

2

有没有办法让客户端在 5 秒后失败/退出,而不是让我等待 30 或 60 秒(就像这是一些默认设置,深入人心)。

请尝试以下代码。在新 SDK 中设置请求超时有点复杂。在代码中,我强制请求在 10 毫秒后超时,并指示 SDK 不要重试请求(options.Retry.MaxRetries = 0;

    static void Main(string[] args)
    {
        HttpClient httpClient = new HttpClient()
        {
            Timeout = TimeSpan.FromMilliseconds(10)
        };
        var transport = new HttpClientTransport(httpClient);
        QueueClientOptions options = new QueueClientOptions()
        {
            Transport = transport,
        };
        options.Retry.MaxRetries = 0;
        var queueClient = new QueueClient(connectionString, "test", options);
        queueClient.CreateIfNotExists();
        Console.WriteLine("Press any key to continue.");
        Console.ReadKey();
    }

客户端会自动重试吗?如果是,这意味着我不需要我的 polly 代码...

是的,它确实。这是默认的重试策略:

在此处输入图像描述

于 2020-07-10T12:39:45.977 回答