1.HttpClient
PoolingHttpClientConnectionManager
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
connManager.setMaxTotal(maxTotal);
connManager.setDefaultMaxPerRoute(maxPerRoute);
超時時間配置
final RequestConfig config = RequestConfig.custom()
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
.setConnectionRequestTimeout(connectionRequestTimeout)
.build();
KeepAliveStrategy
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(final HttpResponse response, final HttpContext context) {
long keepAlive = super.getKeepAliveDuration(response, context);
if (keepAlive == -1) {
keepAlive = defaultAliveTimeMills;
}
return keepAlive;
}
};
Retry
public DefaultHttpRequestRetryHandler(final int retryCount, final boolean requestSentRetryEnabled) {
this(retryCount, requestSentRetryEnabled, Arrays.asList(
InterruptedIOException.class,
UnknownHostException.class,
ConnectException.class,
SSLException.class));
}
Build
HttpClient httpClient = HttpClients.custom()
.setConnectionManager(connManager)
.setKeepAliveStrategy(keepAliveStrategy)
.setDefaultRequestConfig(config)
.setRetryHandler(new DefaultHttpRequestRetryHandler(3,true))
.build();
2.OkHttpClient 開箱即用
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS) //設(shè)置連接超時
.readTimeout(60, TimeUnit.SECONDS) //設(shè)置讀超時
.writeTimeout(60, TimeUnit.SECONDS) //設(shè)置寫超時
.retryOnConnectionFailure(true) //是否自動重連
.build();
3.WebClient 開箱即用
WebClient webClient = WebClient.builder()
.baseUrl(baseUrl)
.defaultHeader(defaultHeader)
.defaultCookie(defaultCookie).build();
總結(jié)
1.OkHttpClient 封裝了HttpClient,性能類似剔猿,HttpClient可以配置更多內(nèi)容泌射,OkHttpClient使用更簡單。
2.HttpClient.excute(request) 是同步非阻塞(使用HttpAsyncClient可以達(dá)到異步非阻塞)娱局,webClient是異步非阻塞郎逃,