Spring Boot提供了许多可与HTTP客户端一起使用的启动器。本节回答与使用它们有关的问题。
7.1. 配置RestTemplate使用代理
如spring-boot-features.html中所述,您可以使用RestTemplateCustomizer
withRestTemplateBuilder
来构建自定义的RestTemplate
。这是创建RestTemplate
配置为使用代理的推荐方法。
代理配置的确切详细信息取决于所使用的基础客户端请求工厂。以下示例使用进行配置HttpComponentsClientRequestFactory
,该HttpClient
代理使用除192.168.0.5
以下主机之外的所有主机的代理:
static class ProxyCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
HttpHost proxy = new HttpHost("proxy.example.com");
HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context)
throws HttpException {
if (target.getHostName().equals("192.168.0.5")) {
return null;
}
return super.determineProxy(target, request, context);
}
}).build();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
}
7.2. 配置基于Reactor Netty的WebClient使用的TcpClient
当Reactor Netty在类路径上时,将WebClient
自动配置基于Reactor Netty的文件。要自定义客户端对网络连接的处理,请提供一个ClientHttpConnector
bean。以下示例配置60秒的连接超时并添加ReadTimeoutHandler
:
@Bean
ClientHttpConnector clientHttpConnector(ReactorResourceFactory resourceFactory) {
HttpClient httpClient = HttpClient.create(resourceFactory.getConnectionProvider())
.runOn(resourceFactory.getLoopResources()).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 60000)
.doOnConnected((connection) -> connection.addHandlerLast(new ReadTimeoutHandler(60)));
return new ReactorClientHttpConnector(httpClient);
}
请注意对ReactorResourceFactory 连接提供程序和事件循环资源的使用。这确保了用于服务器接收请求和客户端发出请求的资源的有效共享。 |
|
---|---|