본문 바로가기

WebClient10

WebClient 사용할때 주의 (3편) response body가 필요 없을 때 response body 가 필요없을 때 releaseBody(), toBodilessEntity(), bodyToMono(Void.class) 세가지 방법이 있다. 그런데 bodyToMono(Void.class) 는 한가지 문제가 있다. reactor-netty 는 bodyToMono(Void.class) 썼을 때 맺었던 커넥션을 커넥션풀에 반납을 하지 못한다. 왜냐하면 reactor-netty 는 통신하고 있는 서버에서 더 받을게 있는지 여부를 모르기 때문이다. 따라서 이 경우 reactor-netty는 해당 커넥션을 닫고 커넥션풀에서 제거한다. 그래서 reactor-netty 메인테이너는 releaseBody(), toBodilessEntity() 두가지만 .. 2021. 6. 23.
Webclient Timeout 과 connection pool 전략 1) Webclient timeout 아래 코드를 보자. 다양한 timeout 옵션들이 있다. new ReactorClientHttpConnector( reactorResourceFactory, httpClient -> httpClient .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) .doOnConnected(connection -> connection.addHandlerLast(new ReadTimeoutHandler(5) ).addHandlerLast(new WriteTimeoutHandler(5)) ).responseTimeout(Duration.ofSeconds(5)) // 0.9.11 부터 추가 ); ChannelOption.CONNECT_TIME.. 2021. 6. 11.
WebClient 사용할때 주의 (2편) exchangeToMono 를 쓸 때 cf) WebClient 사용할때 주의 (1편) 에서 exchange 를 쓸 때 주의할 점을 하나 소개했는데, 이제 exchange는 deprecated 되었고 대신 exchangeToMono 나 exchangeToFlux 를 써야한다. 1) doOnSuccess 와 onErrorResume .exchangeToMono(clientResponse -> clientResponse.toEntity(String.class)) .doOnSuccess(clientResponse -> { if (clientResponse.getStatusCode() != HttpStatus.OK) { throw new RuntimeException("error"); } } ) .onErrorR.. 2021. 6. 10.
WebClient 사용할때 주의 (1편) 헤더 누적 미리 webClient 를 생성해놓고 필요할 때마다 재사용을 할 때 this.webClient = WebClient.builder() .clientConnector(connector) .baseUrl("https://yangbongsoo.tistory.com") .build() .post(); 사용하고자 하는 쪽에서 아래와 같이 header 메서드를 쓴다면 reqest header 가 계속 누적되어 append 되는 문제가 발생한다. this.webClient .uri(uriBuilder -> uriBuilder .path("/api") .queryParam("txId", route.getId() + "-" + System.currentTimeMillis()) .build() ) .header.. 2021. 1. 18.