Spring Boot: вызов REST сервисов с WebClient

Если у вас есть Spring WebFlux на вашем пути к классам, вы также можете использовать WebClient для вызова удаленных REST служб. По сравнению с RestTemplate, этот клиент более функциональный и полностью реактивный.

Spring Boot создает и предварительно настраивает WebClient.Builder для вас; настоятельно рекомендуется внедрить его в ваши компоненты и использовать его для создания экземпляров WebClient. Spring Boot настраивает этот Builder для совместного использования HTTP ресурсов, отражает настройку кодеков так же, как настройки сервера, и многое другое.

Следующий код показывает типичный пример:

@Service
public class MyService {

    private final WebClient webClient;

    public MyService(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://example.org").build();
    }

    public Mono<Details> someRestCall(String name) {
        return this.webClient.get().uri("/{name}/details", name)
                        .retrieve().bodyToMono(Details.class);
    }

}

WebClient Runtime

Spring Boot автоматически определит, какой ClientHttpConnector использовать для управления WebClient, в зависимости от библиотек, доступных в пути к классам приложения. На данный момент поддерживаются Reactor Netty и Jetty RS client.

Стартер spring-boot-starter-webflux по умолчанию зависит от io.projectreactor.netty:processor-netty, который обеспечивает реализацию как сервера, так и клиента. Если вы решите использовать Jetty в качестве реактивного сервера, вам следует добавить зависимость от клиентской библиотеки Jetty Reactive HTTP, org.eclipse.jetty:jetty-reactive-httpclient. Использование одной и той же технологии для сервера и клиента имеет свои преимущества, так как автоматически распределяет HTTP-ресурсы между клиентом и сервером.

Разработчики могут переопределить конфигурацию ресурсов для Jetty и Reactor Netty, предоставив пользовательский компонент ReactorResourceFactory или JettyResourceFactory - это будет применяться как к клиентам, так и к серверам.

Если вы хотите переопределить этот выбор для клиента, вы можете определить свой собственный компонент ClientHttpConnector и иметь полный контроль над конфигурацией клиента.

Настройка WebClient

Существует три основных подхода к настройке WebClient, в зависимости от того, насколько широко вы хотите применить настройки.

Чтобы сделать область возможных настроек как можно более узкой, добавьте автоматически настроенный WebClient.Builder и затем вызовите его методы, как требуется. Экземпляры WebClient.Builder с состоянием: любое изменение в Builder отражается на всех клиентах, впоследствии созданных с его помощью. Если вы хотите создать несколько клиентов с одним и тем же Builder, вы можете также рассмотреть возможность клонирования Builder с помощью WebClient.Builder other = builder.clone();.

Чтобы выполнить аддитивную настройку для всего приложения для всех экземпляров WebClient.Builder, вы можете объявить компоненты WebClientCustomizer и локально изменить WebClient.Builder в точке внедрения.

Наконец, вы можете вернуться к исходному API и использовать WebClient.create(). В этом случае автоконфигурация или WebClientCustomizer не применяются.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки