Spring5中的中的WebClient使用方法详解使用方法详解
主要给大家介绍了关于Spring5中WebClient使用方法的相关资料,文中通过示例代码介绍的非常详细,对大家
学习或者使用Spring5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
前言前言
Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient。WebClient是Spring5中引
入的执行 HTTP 请求的非阻塞、反应式客户端。它对同步和异步以及流方案都有很好的支持,WebClient发布
后,RestTemplate将在将来版本中弃用,并且不会向前添加主要新功能。
WebClient与与RestTemplate比较比较
WebClient是一个功能完善的Http请求客户端,与RestTemplate相比,WebClient支持以下内容:
非阻塞 I/O。
反应流背压(消费者消费负载过高时主动反馈生产者放慢生产速度的一种机制)。
具有高并发性,硬件资源消耗更少。
流畅的API设计。
同步和异步交互。
流式传输支持
HTTP底层库选择底层库选择
Spring5的WebClient客户端和WebFlux服务器都依赖于相同的非阻塞编解码器来编码和解码请求和响应内容。默认底层使用
Netty,内置支持Jetty反应性HttpClient实现。同时,也可以通过编码的方式实现ClientHttpConnector接口自定义新的底层库;
如切换Jetty实现:
WebClient.builder()
.clientConnector(new JettyClientHttpConnector())
.build();
WebClient配置配置
基础配置基础配置
WebClient实例构造器可以设置一些基础的全局的web请求配置信息,比如默认的cookie、header、baseUrl等
WebClient.builder()
.defaultCookie("kl","kl")
.defaultUriVariables(ImmutableMap.of("name","kl"))
.defaultHeader("header","kl")
.defaultHeaders(httpHeaders -> {
httpHeaders.add("header1","kl");
httpHeaders.add("header2","kl");
})
.defaultCookies(cookie ->{
cookie.add("cookie1","kl");
cookie.add("cookie2","kl");
})
.baseUrl("http://www.kailing.pub")
.build();
Netty库配置库配置
通过定制Netty底层库,可以配置SSl安全连接,以及请求超时,读写超时等
HttpClient httpClient = HttpClient.create()
.secure(sslContextSpec -> {
SslContextBuilder sslContextBuilder = SslContextBuilder.forClient()
.trustManager(new File("E://server.truststore"));
sslContextSpec.sslContext(sslContextBuilder);
}).tcpConfiguration(tcpClient -> {
tcpClient.doOnConnected(connection ->
//读写超时设置
connection.addHandlerLast(new ReadTimeoutHandler(10, TimeUnit.SECONDS))
.addHandlerLast(new WriteTimeoutHandler(10))
);
//连接超时设置
tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
.option(ChannelOption.TCP_NODELAY,true);
return tcpClient;
});
WebClient.builder()