#java #spring #spring-mvc #spring-boot #asynchttpclient
#java #весна #spring-mvc #весенняя загрузка #asynchttpclient
Вопрос:
После некоторого сравнительного анализа я обнаружил, что AsyncHttpClient (https://github.com/AsyncHttpClient/async-http-client ) кажется, это самый стабильный и масштабируемый асинхронный http-клиент, поскольку он основан на NIO и, похоже, очень хорошо масштабируется при загрузке. Я сравнил его с OkHttp и Apache Async, и, похоже, он действительно хорошо работает при моделировании серверной части с задержкой.
К сожалению, я еще не нашел никакого способа представить его как Spring AsyncRestTemplate, что затрудняет миграцию в нашей существующей кодовой базе.
Кто-нибудь знает о каком-либо хорошем мосте к RestTemplate, использующем библиотеку, или, если иначе, как создать проблему в проекте Spring, чтобы включить ее в число других асинхронных http-клиентских фабрик?
Ответ №1:
Вы не можете использовать RestTemplate
для асинхронных запросов, вот AsyncRestTemplate
для чего это нужно. Вам нужно будет реализовать свой собственный AsyncClientHttpRequestFactory
. Я кратко просмотрел ссылку, которую вы указали в своем сообщении, и, похоже, вы могли бы обернуть a AsyncRestClient
и вернуться BoundRequestBuilder
из AsyncClientHttpRequestFactory.createAsyncRequest
. Затем вам в основном нужно делегировать вызовы из интерфейсов, специфичных для Spring, конкретным классам AsyncRestClient
. Это не должно быть слишком сложно.
Тем не менее, Spring 5 Web поставляется с WebClient, который выполняет асинхронность и многое другое. Я предлагаю серьезно рассмотреть это, прежде чем создавать свою собственную библиотеку async, хотя и поверх другой.
Комментарии:
1. Спасибо за ответ. Причина использования AsyncHttpClient заключается в том, что я обнаружил, что это лучший клиент на сегодняшний день при работе во время интенсивной одновременной загрузки из http-клиентов, которые я пробовал.
2. @Billybong хорошо, но я не помню, чтобы спрашивал, почему вы выбрали то, что выбрали
3. Справедливая сделка, но вы намекнули на WebClient, который я еще не тестировал на производительность, и я просто указываю причину, по которой я не выбрал этот маршрут.
4. @Billybong я вижу. Однако моя точка зрения остается неизменной: если вы можете использовать уже написанный код вместо него, если создаете свой собственный, это всегда победа. Конечно, если уже написанный код не соответствует вашим требованиям, у вас не остается выбора, кроме как настроить его или создать новое программное обеспечение.
Ответ №2:
Вот официальный java-документ spring RestTemplate.
Примечание: по умолчанию RestTemplate использует стандартные средства JDK для установления HTTP-соединений. Вы можете переключиться на использование другой HTTP-библиотеки, такой как Apache HttpComponents, Netty и OkHttp, через HttpAccessor.setRequestFactory(org.springframework.http.client .Свойство ClientHttpRequestFactory).
РЕДАКТИРОВАТЬ: хорошо, здесь вы получаете ответ с ложкой:
AsyncRestTemplate template = new AsyncRestTemplate(
new HttpComponentsAsyncClientHttpRequestFactory());
HttpComponentsAsyncClientHttpRequestFactory является частью spring начиная с 4.0
Комментарии:
1. Это вообще не отвечает на вопрос OP. Вы не сказали, как поддерживать
AsyncHttpClient
, вы просто доказали, что у вас есть подключение к Интернету.2. @AbhijitSarkar, не могли бы вы, пожалуйста, удалить отрицательный голос за этот ответ?
3. Прежде всего, отрицательные голоса анонимны, поэтому вы не знаете, был ли это я или кто-то другой, и я бы проголосовал против вас сейчас, если бы я уже не предположил, что это был я. Во-вторых, если бы я проголосовал против вас, для этого была бы причина; что заставляет вас думать, что вы можете изменить мое мнение? Все время случается, что людям может не понравиться ваш ответ; двигайтесь дальше.
4. Просто чтобы вы знали, класс, на который вы ссылались в своем редактировании, взят из библиотеки компонентов http, а это не та библиотека, на которую ссылается OP.