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 代码中设置不正确 - 发布这对进一步排除故障非常有帮助。
我正在使用 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 代码中设置不正确 - 发布这对进一步排除故障非常有帮助。