I / O超时异常java.net.ConnectException调用API时

问题描述

我正在使用HttpClient来调用API并获取其响应,并且我将超时时间设置为60秒。在这60秒内,Java每20秒尝试重试一次以连接到API,并显示异常。在最后60秒内,它停止重试。

我的疑问是:此I / O异常是由API引起的吗?由于我将超时设置为高于异常返回(每20秒)。

这是代码和日志:

HttpClient client = new HttpClient();
getmethod getmethod = new getmethod(GET_TICKETS_URL);
getmethod.setRequestHeader("Content-Type","application/json");
getmethod.setRequestHeader("Accept","application/json");
getmethod.getParams().setSoTimeout(60000);
logger.info("Calling service: " + getmethod.getPath());

client.gethttpconnectionManager().getParams().setConnectionTimeout(60000);
client.gethttpconnectionManager().getParams().setSoTimeout(60000);
client.getParams().setSoTimeout(60000);
client.getParams().setConnectionManagerTimeout(60000);

int getTicketsResponse = client.executeMethod(getmethod);
[2020-08-27 13:41:25,215] pool-3-thread-1 br.com.pfm.tasks.baml.task Task INFO  - Calling service: /
[2020-08-27 13:41:46,228] pool-3-thread-1 org.apache.commons.httpclient.HttpMethodDirector INFO  - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect
[2020-08-27 13:41:46,228] pool-3-thread-1 org.apache.commons.httpclient.HttpMethodDirector INFO  - retrying request
[2020-08-27 13:42:07,242] pool-3-thread-1 org.apache.commons.httpclient.HttpMethodDirector INFO  - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect
[2020-08-27 13:42:07,242] pool-3-thread-1 org.apache.commons.httpclient.HttpMethodDirector INFO  - retrying request
[2020-08-27 13:42:28,258] pool-3-thread-1 org.apache.commons.httpclient.HttpMethodDirector INFO  - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect
[2020-08-27 13:42:28,258] pool-3-thread-1 org.apache.commons.httpclient.HttpMethodDirector INFO  - retrying request
[2020-08-27 13:42:49,271] pool-3-thread-1 br.com.pfm.tasks.baml.task ERROR - java.net.ConnectException: Connection timed out: connect

解决方法

当从url中读取有问题时,会发生I / O异常,您是否能够获取堆栈stacktrace,将提供有关该问题的见解,可能是服务器不可用或从http 400中找不到任何内容+

因此,请将其添加到您的catch块中,将帮助您了解问题的出处。

catch(Exception e)
{
   e.printStacktrace();
}
,

根据此处显示的一些不完整的信息,堆栈跟踪可能会揭示出故障点,即您试图启动HTTP事务的位置(实际上告诉它前进并进行连接)。

假设您已在GetMethod中正确设置了所有内容(我无法告知),我是否可以建议您检查要达到的目标是否可以从计算机上实际到达?尝试使用wget,或者将其放在桌面上,尝试使用浏览器进行访问。如果这样可行,则可能是您在GetMethod代码中设置了错误的内容-发布该消息将有助于进一步解决问题。