Я использую IHttpClientFactory для создания HttpClients в моих классах с тайм-аутом, равным 20 сек для моего клиента. Я просматривал журналы зависимостей в обзорах приложений и обнаружил, что были запросы с тайм-аутом, но длительность зависимости была намного меньше установленного тайм-аута 20 сек. См. Изображение ниже для этих данных.
SetTimeout vs продолжительность зависимости для истекших запросов на зависимость
Итак, я предполагаю, что в Экземпляр HttpClient, где запросы ждут своей очереди и затем фактически обрабатываются. Это объясняет, почему продолжительность зависимости составляет около 2 секунд, но время ожидания запроса все еще истекло (время ожидания составляет 20 секунд). Эти запросы находились в очереди около 18 секунд, прежде чем их отправили.
В файле startup.cs я настраиваю HttpClientFactory следующим образом:
services.AddHttpClient("LongTimeoutClient", c => { c.Timeout = TimeSpan.FromMilliseconds(22000); })
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { UseCookies = false})
.SetHandlerLifetime(TimeSpan.FromMinutes(5));
В моем классе я использую httpClient as:
httpClient = httpClientFactory.CreateClient("LongTimeoutClient");
Кроме того, для 7 экземпляров приложения процентили длительности зависимости были (см. здесь Проценты продолжительности зависимости с 7 экземплярами приложения )
Когда, Я увеличил экземпляр до 9, процентили длительности зависимости резко уменьшились (см. Здесь процентили длительности зависимости с 9 экземплярами приложения )
Кроме того, после увеличения экземпляра приложения мы смогли обработать 22k запросов в час. Раньше это было 14К. Увеличение пропускной способности не пропорционально увеличению в экземплярах.
Почему продолжительность зависимости уменьшается после увеличения числа экземпляров приложения? Имеет ли это какое-то отношение к отсутствию соединений, которые экземпляр может устанавливать с конечным сервером за раз, что также может быть причиной этой очереди в HttpClient? Зачем хотя бы производительность на 60% (от 14k до 22k), когда экземпляры увеличились только примерно на 30% (от 7 до 9)
Пытаясь понять все вышеперечисленное, как я могу решить проблему с этими тайм-аутами, когда продолжительность зависимости намного меньше, чем фактическое время ожидания, установленное на httpclient? Есть ли способ установить минимальное количество httpclients в пуле фабрики клиентов? Или любые другие предложения, которые могут помочь? Заранее спасибо