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

I/O timeout exception (java.net.ConnectException) When calling API

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

我的疑惑是:这个I/O异常是由API引起的?由于我设置的超时高于异常 returns(每 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

I/O 当从 url 中读取时出现问题时发生异常,您能否获取堆栈堆栈跟踪,将深入了解该问题,可能是服务器不可用或未从 http 400+

中找到任何内容

所以请将此添加到您的 catch 块中,这将帮助您了解哪里出了问题。

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

根据此处提供的信息有些不完整,堆栈跟踪可能会揭示失败点是您尝试启动 HTTP 事务的地方(实际上是告诉它开始连接)。

假设您已在 GetMethod 中正确设置所有内容(我不能说),我可以建议您检查您尝试达到的目标是否真的可以从机器到达?尝试 wget,或者如果它在桌面上,请尝试使用浏览器访问它。如果可行,则可能是您在 GetMethod 代码中设置不正确 - 发布这对进一步排除故障非常有帮助。