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(一个线程处理完请求后直接返回,等待请求后的数据准备完成后,再进行通知处理),很适用与大流量场景,提高了系统的并发性

 

posted @ 2021-04-30 09:14  龙之谷2019  阅读(1491)  评论(0)    收藏  举报