RestTemplate для AsyncHttpClient

#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.