Разумно ли создавать Webclient снова и снова в Webflux, поскольку мой базовый URI не фиксирован? - PullRequest
0 голосов
/ 19 декабря 2018

В моем микросервисе я должен получать данные из разных мест.Некоторые URL-адреса являются фиксированными, но некоторые нет.Так что мне нужно создавать Webclient снова и снова, если мой базовый URL меняется.Если нет, то ниже приведен правильный способ создания веб-клиента.WebClient.create ();и позже меняю URI снова и снова всякий раз, когда я звоню.Насколько я понимаю, создание WebClient должно быть тяжелой операцией.

ReactorClientHttpConnector connector = new ReactorClientHttpConnector(
                options -> options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, requestTimeout).compression(true)
                        .afterNettyContextInit(ctx ->  ctx.addHandlerLast(new ReadTimeoutHandler(readTimeout, TimeUnit.MILLISECONDS))));
        return WebClient.builder()
                        .clientConnector(connector)
                        .baseUrl(hostURL)
                        .build();

1 Ответ

0 голосов
/ 19 декабря 2018

WebClient экземпляры предназначены для повторного использования.Единственная причина, по которой вам нужно иметь разные экземпляры клиента, - это особые потребности: инструментарий для наблюдения, специальные фильтры клиента аутентификации, определенные тайм-ауты подключения / чтения / записи.

Различные базовые URI не являются веской причиной для созданияразные экземпляры.Идеально создать экземпляр и не устанавливать базовый URI, это просто удобство, чтобы избежать дублирования при повторном вызове одного и того же хоста.

Это прекрасно:

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

Mono<Resource> resource = webClient.get().uri("http://example.org/resource").retrieve()...;
Mono<Project> project = webClient.get().uri("http://spring.io/projects/spring-boot").retrieve()...;

Обратите внимание, что если вы используете Spring Boot, вам следует рассмотреть возможность создания экземпляра веб-клиента с использованием предоставленной WebClient.Builder (см. справочную документацию Spring Boot ).

...