遇到问题--HttpClient默认重试策略不处理SocketTimeoutException

情况

使用httpClient 4.5.3版本的默认重试策略DefaultHttpRequestRetryHandler.

httpclient默认会有三次重试,但是 生产环境 运行时 发现 超时报错并没有进行重试。

报错信息如下:

Caused by: java.net.ConnectException: Connection timed out (Connection timed out)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)

原因

httpClient默认重试策略DefaultHttpRequestRetryHandler针对连接超时和获取数据超时并不会重试,需要自定义重试策略。

采用HttpClient 4.5.3发起http请求,代码如下,使用方式正常

	// 创建HttpClientBuilder
			HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
			CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
			HttpGet httpGet = new HttpGet(uri);
			// 添加http头信息
			if (needAuth) {
				httpGet.addHeader("Authorization",
						"Basic " + Base64.getUrlEncoder().encodeToString((username + ":" + password).getBytes()));
			}
			Stri

猜你喜欢

转载自blog.csdn.net/q383965374/article/details/103029626