Как изменить время ожидания по умолчанию для хранилища очередей Azure QueueClient.CreateIfNotExists()?

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

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

// 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% и т. Д.) ... тогда он зависает надолго... до моей Полли код срабатывает для своей "политики повтора".

Вопросы:

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам