【发布时间】:2016-04-03 12:02:00
【问题描述】:
我正在使用 apache http 客户端 v4.5 并将其用作 REST 客户端。在某些情况下,当 httpclient 框架读取接收到的内容并将其显示为最后一条消息时,我会识别出错误“[read] I/O error: Read timed out”。
它似乎没有影响,但我想知道是否有人知道它来自哪里以及如何解决它。根据以下线程 (link),这似乎是“多线程”配置的问题。
但是,我只使用了 http 客户端的默认配置,而在使用 v4 版本时,我不知道如何将“多线程”设置为 false 以查看它是否有任何区别。
我也尝试设置超时,但没有帮助。
有什么提示吗?
日志:
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "HTTP/1.1 200 OK[\r][\n]"
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Date: Tue, 29 Dec 2015 14:48:03 GMT[\r][\n]"
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8[\r][\n]"
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "X-Powered-By: PHP/5.6.8[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Cache-Control: nocache, private[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Length: 99[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Keep-Alive: timeout=5, max=99[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Connection: Keep-Alive[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Type: application/json[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[\r][\n]"
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "{"success":true,"data":{"id":1946,"location":"http:\/\/localhost:9001\/shop\/api\/articles\/1946"}}"
15:48:06.016 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[read] I/O error: Read timed out"
我的 Http 客户端初始化
HttpClientBuilder httpBuilder = HttpClientBuilder.create();
// set timeout did not helped
// RequestConfig.Builder requestBuilder = RequestConfig.custom();
// requestBuilder = requestBuilder.setConnectTimeout(timeout);
// requestBuilder = requestBuilder.setConnectionRequestTimeout(timeout);
// requestBuilder = requestBuilder.setSocketTimeout(timeout);
// httpBuilder.setDefaultRequestConfig(requestBuilder.build());
HttpClient httpClient = httpBuilder.build();
【问题讨论】:
-
它不打印任何东西。 您的代码 打印它。不清楚你在问什么,
-
您使用的是哪个版本的 apache http 客户端?好吧,我在问是否有人知道为什么会出现错误消息“[read] I/O error: Read timed out”。
-
我也看到了。还值得注意的是,没有抛出异常,也没有记录为错误,就像调试一样。
-
这似乎与多线程使用 HttpClient 的连接池有关,但实际上并不会导致问题。
标签: java multithreading timeout httpclient apache-httpcomponents