首页 > 解决方案 > RestTemplate HttpClient connectionRequestTimeout

问题描述

为了配置 RestTemplate 我使用以下配置:

HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault());
httpRequestFactory.setConnectTimeout(connectionTimeoutMs);
httpRequestFactory.setConnectionRequestTimeout(readTimeoutMs);
httpRequestFactory.setReadTimeout(readTimeoutMs);

RestTemplate restTemplate = new RestTemplate(httpRequestFactory);

我了解连接和读取超时的目的。但我不明白连接请求超时的目的。Javadoc 也不清楚这是什么意思。你能解释一下吗?

标签: springtimeoutconnectionhttpclientresttemplate

解决方案


正如文档所说:

设置使用底层 HttpClient 从连接管理器请求连接时使用的超时时间(以毫秒为单位)。

REST这意味着您将允许连接管理器从其池中为您提供可用连接的最长时间(因此它与您将访问的服务本身无关)。

要定义自定义连接管理器,您可以使用:

CloseableHttpClient httpClientBuilder = HttpClientBuilder.create().setConnectionManager(...).build();
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClientBuilder);

推荐阅读