Как создать Spring WebClient из Apache Http Client

Я хочу создать WebClient из HttpComponent's org.apache.http.client.HttpClient, чтобы использовать его в асинхронных операциях. Любая идея о том, как это сделать


person user3847425    schedule 09.08.2018    source источник
comment
Я даже понятия не имею, чего именно вы пытаетесь достичь. Что вы сделали до сих пор? Где столкнулись с проблемами?   -  person Thomas    schedule 09.08.2018
comment
Пожалуйста, предоставьте более подробную информацию   -  person Sergey Prosin    schedule 09.08.2018
comment
Привет, Томас Привет, Сергей, у меня в основном есть объект http-клиента, и мне нужно создать объект веб-клиента для выполнения асинхронных вызовов, поскольку это то, что поддерживается только для реактивного программирования. Не удалось найти способ сделать это   -  person user3847425    schedule 09.08.2018
comment
В настоящее время Spring поддерживает клиентов Jetty и Netty. См. Как использовать клиент Jetty. По сути, любая реализация ClientHttpConnector будет работать. В настоящее время реализация httpcomponent недоступна — она может быть добавлена ​​в будущем.   -  person Ritesh    schedule 14.12.2019
comment
Работайте над использованием HttpClient Java 11 выполняется. См. интеграцию JDK 11 HttpClient с WebClient.   -  person Ritesh    schedule 14.12.2019


Ответы (2)


С выпуском Spring Framework 5.3 и Spring Boot 2.4 появилась встроенная интеграция между Apache HttpClient 5.0 и Spring WebClient.

HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom();
clientBuilder.setDefaultRequestConfig(...);
CloseableHttpAsyncClient client = clientBuilder.build();
ClientHttpConnector connector = new HttpComponentsClientHttpConnector(client);

WebClient webClient = WebClient.builder().clientConnector(connector).build();

ОБНОВЛЕНИЕ (на основе комментария @kolyaiks)

Необходимые зависимости:

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.1</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents.core5</groupId>
    <artifactId>httpcore5-reactive</artifactId>
    <version>5.1</version>
</dependency>
person Martin Tarjányi    schedule 20.09.2020
comment
Я хотел бы упомянуть, что вам нужно добавить некоторые зависимости Maven, чтобы включить это: httpclient5, httpcore5-parent, httpcore5-reactive - person kolyaiks; 16.05.2021

С org.apache.http.client.HttpClient это сложно, потому что он не был разработан для этого, вы могли бы это сделать, но это было бы тихим отрывочным решением с большим количеством кода самостоятельно. Лучше используйте что-то, предназначенное для HttpAsyncClient (тоже от apache, кстати).

Здесь вы найдете некоторую информацию и пример кода: https://hc.apache.org/httpcomponents-asyncclient-ga/quickstart.html

Удачи

person LeBraveLittleToaster    schedule 09.08.2018
comment
Не могли бы вы поделиться тем, что может быть грязным решением, если у нас нет возможности использовать HttpAsyncClient, поскольку у нас есть только доступный объект HTTPClient, тогда как нам нужно использовать WebClient на основе Spring Webflux для выполнения остальных вызовов. - person user3847425; 09.08.2018