Я хочу создать WebClient
для отправки запроса к стороннему API. Сегодня я получаю это сообщение об ошибке
Pending acquire queue has reached its maximum size of 1000
Я провел несколько исследований и нашел решение этой проблемы, настроив количество pendingAcquireMaxCount
и maxConnections
следующим образом.
val sslContext = SslContextBuilder
.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build()
val connectionProvider = ConnectionProvider.builder("aws-client")
.maxConnections(10000)
.pendingAcquireMaxCount(-1) // no limit
.build()
val httpConnector = HttpClient.create(connectionProvider).secure { it.sslContext(sslContext) }
return WebClient
.builder()
.clientConnector(ReactorClientHttpConnector(httpConnector))
.build()
но мне интересно, каковы недостатки установки слишком большого количества pendingAcquireMaxCount
и maxConnections
. Почему по умолчанию ожидание получения 1000 вместо безлимитного. Есть ли что-то, о чем я должен беспокоиться?
Мне кажется, что для каждой из упомянутых вами конфигураций у вас разный ответ.
максконнектионс
Это определяет количество каналов, которые создает клиент, и мне кажется, что установка этого значения на большое число/без ограничений вызовет 2 проблемы:
pendingAcquireMaxCount
Установив, что неограниченное количество подключений может вызвать некоторые проблемы, установка этого значения на неограниченное также может вызвать 2 проблемы:
Переполнение запросов — если запросы постоянно создаются быстрее, чем они решаются, это приведет к тому, что количество запросов будет постоянно увеличиваться (вместо того, чтобы некоторые из них просто отклонялись с ошибкой). Даже если наблюдается всплеск запросов, а не постоянно более высокая скорость, это может привести к тому, что проблема будет отложена до решения (вместо того, чтобы сразу отклонять запросы и возвращаться к нормальному состоянию, вместо этого будет отложена обработка до их всех).
Задержка запросов - если это не ограничено, вы не знаете, как долго вам, возможно, придется ждать (1 секунду? 1 минуту?), Поскольку это зависит от количества предыдущих запросов, где в ограниченном сценарии вы знаете, что ждете максимум X попыток, независимо от количества запросов.
установление соединения выделяет память, если вы не хотите идти дальше.