webFlux 设置超时时间、负载均衡
1 spring 5.0.X: 2 private static ReactorClientHttpConnector Reactor_Client_Http_Connector = new ReactorClientHttpConnector( 3 options -> options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000) 4 .compression(true) 5 .afterNettyContextInit(ctx -> { 6 ctx.addHandlerLast(new ReadTimeoutHandler(3000, TimeUnit.MILLISECONDS)); 7 })); 8 9 10 spring 5.2.X: 11 HttpClient httpClient = HttpClient.create() 12 .tcpConfiguration(client -> 13 client.doOnConnected(conn -> conn 14 .addHandlerLast(new ReadTimeoutHandler(10))//客户端获取读到信息的时间 15 .addHandlerLast(new WriteTimeoutHandler(10))));//远程将信息写入客户端完成的时间 16 ReactorClientHttpConnector Reactor_Client_Http_Connector = new ReactorClientHttpConnector(httpClient) 17 18 webClient.builder builder=WebClient.builder().exchangeStrategies(ExchangeStrategies.builder().codecs(
configurer->configurer.defaultCodecs()
.maxInMemroySize(1024*1024)//可以理解为响应报文大小
builder())
.clientConnector(Reactor_Client_Http_Connector)
.defaultHeader(HttpHeaders.CONTENT_TYPE,"application/json"));//如果请求是表单格式,这里可以换成application/x-www-form-urlencoded
19
负载均衡:
1 @Configuration 2 public class WebClientConfig { 3 4 @Autowired 5 private LoadBalancerExchangeFilterFunction lbFunction; 6 7 @Bean 8 public WebClient webClient(){ 9 return WebClient.builder() 10 .filter(lbFunction) 11 .build(); 12 } 13 }
webclient比起restTemplate的一个好处就是webClient使用了多路复用I/O(一个线程处理多个I/O请求)和非阻塞I/O(一个线程处理完请求后直接返回,等待请求后的数据准备完成后,再进行通知处理),很适用与大流量场景,提高了系统的并发性

浙公网安备 33010602011771号