connectionRequestTimout:指从连接池获取连接的timeout
connetionTimeout:指客户端和服务器建立连接的timeout,
就是http请求的三个阶段,一:建立连接;二:数据传送;三,断开连接。超时后会ConnectionTimeOutException
socketTimeout:指客户端从服务器读取数据的timeout,超出后会抛出SocketTimeOutException
实战示例:
@Configuration
@EnableConfigurationProperties(HttpClientProperties.class)
public class HttpClientAutoConfiguration {
@Autowired
private HttpClientProperties properties;
@Bean
public ClientHttpRequestFactory httpComponentsClientHttpRequestFactory(HttpClient httpClient) {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectionRequestTimeout((int) this.properties.getPool().getConnectionRequestTimeout().toMillis());
factory.setConnectTimeout((int) this.properties.getPool().getConnectionTimeout().toMillis());
factory.setReadTimeout((int) this.properties.getPool().getReadTimeout().toMillis());
factory.setHttpClient(httpClient);
// factory.setBufferRequestBody(false);
return factory;
}
}
@ConfigurationProperties(prefix = "httpclient")
public class HttpClientProperties {
private Pool pool = new Pool();
private Proxy proxy = new Proxy();
public Pool getPool() {
return pool;
}
public void setPool(Pool pool) {
this.pool = pool;
}
public static class Pool {
private int maxTotal = 2000;
private int defaultMaxPerRoute = 100;
/**
* 默认20秒
*/
private Duration connectionRequestTimeout = Duration.ofSeconds(20);
/**
* 默认10秒
*/
private Duration connectionTimeout = Duration.ofSeconds(10);
/**
* 默认10分钟
*/
private Duration readTimeout = Duration.ofMinutes(10);
//省略get和set方法
}
}