Как изменить тайм-аут по умолчанию для хранилища очереди Azure QueueClient.CreateIfNotExists ()? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь использовать SDK v12 для Azure очередей.

Когда я создаю свой экземпляр очереди, первое, что я делаю при запуске приложения, - это проверяю, существует ли очередь. На основе типичных примеров документации :

// 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();

Это здорово .. но ... если код не может получить доступ к хранилищу очередей (например, неверная строка подключения / эмулятор хранилища localhost не 100% запустился, эт c) .. потом он надолго зависает .. пока мой код Polly не сработает, это "политика повтора".

Вопросы:

  • Есть ли способ позволить клиенту выйти из строя / завершить работу через 5 секунд вместо того, чтобы мне пришлось ждать 30 или 60 секунд (например, это какая-то настройка по умолчанию, в глубине души).
  • Повторяется ли клиент автоматически? Если да, это означает, что мне не нужен мой код опроса ...

1 Ответ

2 голосов
/ 10 июля 2020

Есть ли способ позволить клиенту выйти из строя / завершить работу через 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();
    }

Повторяется ли клиент автоматически? Если да, это означает, что мне не нужен мой код опроса ...

Да, нужен. Вот политика повтора по умолчанию:

введите описание изображения здесь

...