Настройка времени ожидания для каждого запроса для Spring WebClient? - PullRequest
0 голосов
/ 02 февраля 2019

Я знаю о Spring 5 webflux, как установить время ожидания для Webclient , но это настраивает время ожидания глобально для всех запросов.Я ищу способ настроить время ожидания для каждого запроса.Т.е. что-то вроде этого (псевдокод не работает):

WebClient client = ...

// Call 1
client.timeout(5, TimeUnit.SECONDS).contentType(APPLICATION_JSON).syncBody(..).exchange(). ..

// Call 2
client.timeout(4, TimeUnit.SECONDS).contentType(APPLICATION_JSON).syncBody(..).exchange(). 

Функция timeout предназначена для демонстрации того, что я ищу.Как мне этого добиться?Также важно, чтобы ресурсы очищались должным образом по таймауту.

Если есть какая-то разница, я использую Netty (reactor-netty 0.8.4.RELEASE):

HttpClient httpClient = HttpClient.create(). ...;

 WebClient webClient = WebClient.builder()
          .clientConnector(new ReactorClientHttpConnector(httpClient))
          .build();

1 Ответ

0 голосов
/ 02 февраля 2019

Эти два ответа ясно объясняют это.

set-time-in-spring-webflux-webclient
spring-5-webflux-how-to-set-a-timeout-on-webclient .

Кроме того, если вы хотите изменить параметры,

вы можете сделать, как показано ниже,

 TcpClient tcpClient = TcpClient.create()
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000)
                .doOnConnected(connection ->
                        connection.addHandlerLast(new ReadTimeoutHandler(10))
                                .addHandlerLast(new WriteTimeoutHandler(10)));
        return this.webClient
                .mutate()
                .clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
                .build()
                .get()

...