Spring WebClient, каковы недостатки назначения большого количества максимальным соединениям?

Я хочу создать 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 вместо безлимитного. Есть ли что-то, о чем я должен беспокоиться?

установление соединения выделяет память, если вы не хотите идти дальше.

Toerktumlare 17.04.2023 18:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне кажется, что для каждой из упомянутых вами конфигураций у вас разный ответ.

максконнектионс

Это определяет количество каналов, которые создает клиент, и мне кажется, что установка этого значения на большое число/без ограничений вызовет 2 проблемы:

  1. Вызывает увеличение потребления памяти, что может привести к OOM в конце строки.
  2. Может вызвать определенные «потери», которые создадут новые каналы, вместо того, чтобы дождаться завершения другого соединения и повторного использования — это зависит от реализации, как указано в документации здесь.

pendingAcquireMaxCount

Установив, что неограниченное количество подключений может вызвать некоторые проблемы, установка этого значения на неограниченное также может вызвать 2 проблемы:

  1. Переполнение запросов — если запросы постоянно создаются быстрее, чем они решаются, это приведет к тому, что количество запросов будет постоянно увеличиваться (вместо того, чтобы некоторые из них просто отклонялись с ошибкой). Даже если наблюдается всплеск запросов, а не постоянно более высокая скорость, это может привести к тому, что проблема будет отложена до решения (вместо того, чтобы сразу отклонять запросы и возвращаться к нормальному состоянию, вместо этого будет отложена обработка до их всех).

  2. Задержка запросов - если это не ограничено, вы не знаете, как долго вам, возможно, придется ждать (1 секунду? 1 минуту?), Поскольку это зависит от количества предыдущих запросов, где в ограниченном сценарии вы знаете, что ждете максимум X попыток, независимо от количества запросов.

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