在 Java 中进行远程调用时要处理哪些异常
Which exceptions to handle while making a remote call in Java
我正在我的应用程序中进行远程调用。我想处理不同的异常并在各自的异常情况下执行不同的任务。
我正在调查 MalformedURLException
、UnknownHostException
、ConnectionException
和 SocketTimeoutException
。
我知道在 MalformedURLException
的情况下我想放弃请求,这个请求相当简单。
catch (MalformedURLException e) {
log.info("MalformedURLException while fetching log");
log.info("Content Url is Invalid and is being Dropped");
return keywords;
}
现在如果互联网断开连接我想在一个小间隔后重试请求。这里我应该处理哪个异常?
我在 ConnectException
和 UnknownHostException
之间感到困惑。
catch (UnknownHostException e) {
log.info("UnknownHostException while fetching log");
log.info("Internet disconnectivity Retrying Content Url");
keywords.add(value);
Thread.sleep(1000);
return keywords;
}
接下来我在我的代码中使用 con.setConnectTimeout(20000);
和 con.setReadTimeout(30000);
。所以我猜如果这个过期了那么我可以处理 SocketTimeoutException
?
catch (SocketTimeoutException e) {
log.info("SocketTimeoutException while fetching log:");
keywords = increaseRetryCount(keywords, result, retryCount, url);
return keywords;
}
我是否正确地处理了问题并使用了正确的异常?如果我遗漏了什么,请告诉我。
ConnectException
和 UnknownHostException
都可能在没有连接时出现。 UnknownHostException
在 DNS 缓存中没有条目时发生,ConnectException
在 DNS 缓存中有条目但无法访问主机时发生。
简单地捕获 IOException
并重试(但不是永远,而是增加停顿并在一段时间后放弃)。
唯一的特殊情况是无效 URL 或来自服务器的永久性错误(如无效身份验证,...)。
我正在我的应用程序中进行远程调用。我想处理不同的异常并在各自的异常情况下执行不同的任务。
我正在调查 MalformedURLException
、UnknownHostException
、ConnectionException
和 SocketTimeoutException
。
我知道在 MalformedURLException
的情况下我想放弃请求,这个请求相当简单。
catch (MalformedURLException e) {
log.info("MalformedURLException while fetching log");
log.info("Content Url is Invalid and is being Dropped");
return keywords;
}
现在如果互联网断开连接我想在一个小间隔后重试请求。这里我应该处理哪个异常?
我在 ConnectException
和 UnknownHostException
之间感到困惑。
catch (UnknownHostException e) {
log.info("UnknownHostException while fetching log");
log.info("Internet disconnectivity Retrying Content Url");
keywords.add(value);
Thread.sleep(1000);
return keywords;
}
接下来我在我的代码中使用 con.setConnectTimeout(20000);
和 con.setReadTimeout(30000);
。所以我猜如果这个过期了那么我可以处理 SocketTimeoutException
?
catch (SocketTimeoutException e) {
log.info("SocketTimeoutException while fetching log:");
keywords = increaseRetryCount(keywords, result, retryCount, url);
return keywords;
}
我是否正确地处理了问题并使用了正确的异常?如果我遗漏了什么,请告诉我。
ConnectException
和 UnknownHostException
都可能在没有连接时出现。 UnknownHostException
在 DNS 缓存中没有条目时发生,ConnectException
在 DNS 缓存中有条目但无法访问主机时发生。
简单地捕获 IOException
并重试(但不是永远,而是增加停顿并在一段时间后放弃)。
唯一的特殊情况是无效 URL 或来自服务器的永久性错误(如无效身份验证,...)。