protected static ClientHttpRequestFactory createRequestFactory(HttpClientBuilder builder, int timeoutInMs) { HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(builder.build()); httpComponentsClientHttpRequestFactory.setReadTimeout(timeoutInMs); httpComponentsClientHttpRequestFactory.setConnectionRequestTimeout(timeoutInMs); httpComponentsClientHttpRequestFactory.setConnectTimeout(timeoutInMs); return httpComponentsClientHttpRequestFactory; }
@Test public void defaultSettingsOfHttpClientMergedOnExecutorCustomization() throws Exception { RequestConfig defaultConfig = RequestConfig.custom().setConnectTimeout(1234).build(); CloseableHttpClient client = mock(CloseableHttpClient.class, withSettings().extraInterfaces(Configurable.class)); Configurable configurable = (Configurable) client; when(configurable.getConfig()).thenReturn(defaultConfig); HttpComponentsClientHttpRequestFactory hrf = new HttpComponentsClientHttpRequestFactory(client); assertSame("Default client configuration is expected", defaultConfig, retrieveRequestConfig(hrf)); hrf.setConnectionRequestTimeout(4567); RequestConfig requestConfig = retrieveRequestConfig(hrf); assertNotNull(requestConfig); assertEquals(4567, requestConfig.getConnectionRequestTimeout()); // Default connection timeout merged assertEquals(1234, requestConfig.getConnectTimeout()); }
@Test public void assertCustomConfig() throws Exception { HttpClient httpClient = HttpClientBuilder.create().build(); HttpComponentsClientHttpRequestFactory hrf = new HttpComponentsClientHttpRequestFactory(httpClient); hrf.setConnectTimeout(1234); hrf.setConnectionRequestTimeout(4321); hrf.setReadTimeout(4567); URI uri = new URI(baseUrl + "/status/ok"); HttpComponentsClientHttpRequest request = (HttpComponentsClientHttpRequest) hrf.createRequest(uri, HttpMethod.GET); Object config = request.getHttpContext().getAttribute(HttpClientContext.REQUEST_CONFIG); assertNotNull("Request config should be set", config); assertTrue("Wrong request config type" + config.getClass().getName(), RequestConfig.class.isInstance(config)); RequestConfig requestConfig = (RequestConfig) config; assertEquals("Wrong custom connection timeout", 1234, requestConfig.getConnectTimeout()); assertEquals("Wrong custom connection request timeout", 4321, requestConfig.getConnectionRequestTimeout()); assertEquals("Wrong custom socket timeout", 4567, requestConfig.getSocketTimeout()); }
@Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(); httpRequestFactory.setConnectionRequestTimeout(3000); httpRequestFactory.setConnectTimeout(3000); httpRequestFactory.setReadTimeout(10000); return new RestTemplate(httpRequestFactory); } }
requestFactory.setConnectionRequestTimeout(200);
public static ClientHttpRequestFactory getRequestFactory(TimeoutConfig timeoutConfig) { Properties properties = System.getProperties(); String proxyHost = properties.getProperty("http.proxyHost"); int proxyPort = properties.containsKey("http.proxyPort") ? Integer.valueOf(properties.getProperty("http.proxyPort")) : 80; if (HTTP_COMPONENTS_AVAILABLE) { HttpComponentsClientHttpRequestFactory factory = (HttpComponentsClientHttpRequestFactory) HttpComponentsClientRequestFactoryCreator .createRequestFactory(proxyHost, proxyPort); factory.setReadTimeout(timeoutConfig.getReadTimeout()); factory.setConnectTimeout(timeoutConfig.getConnectTimeout()); factory.setConnectionRequestTimeout(timeoutConfig.getConnectionRequestTimeout()); return factory; } else { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(timeoutConfig.getConnectTimeout()); requestFactory.setReadTimeout(timeoutConfig.getReadTimeout()); if (proxyHost != null) { requestFactory.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort))); } return requestFactory; } }
/** * 获取连接工厂 * * @return the result */ private ClientHttpRequestFactory getClientHttpRequestFactory() { HttpClient httpClient = getHttpClient(); // httpClient连接配置,底层是配置RequestConfig HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); // 连接超时 clientHttpRequestFactory.setConnectTimeout(wxProperties.getInvoker().getConnectTimeout()); // 数据读取超时时间,即SocketTimeout clientHttpRequestFactory.setReadTimeout(wxProperties.getInvoker().getReadTimeout()); // 连接不够用的等待时间,不宜过长,必须设置,比如连接不够用时,时间过长将是灾难性的 clientHttpRequestFactory.setConnectionRequestTimeout(wxProperties.getInvoker().getConnectionRequestTimeout()); return clientHttpRequestFactory; }