在 Java 中进行远程调用时要处理哪些异常

Which exceptions to handle while making a remote call in Java

我正在我的应用程序中进行远程调用。我想处理不同的异常并在各自的异常情况下执行不同的任务。

我正在调查 MalformedURLExceptionUnknownHostExceptionConnectionExceptionSocketTimeoutException

我知道在 MalformedURLException 的情况下我想放弃请求,这个请求相当简单。

catch (MalformedURLException e) {
    log.info("MalformedURLException while fetching log");
    log.info("Content Url is Invalid and is being Dropped");
    return keywords;
}

现在如果互联网断开连接我想在一个小间隔后重试请求。这里我应该处理哪个异常?

我在 ConnectExceptionUnknownHostException 之间感到困惑。

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;
}

我是否正确地处理了问题并使用了正确的异常?如果我遗漏了什么,请告诉我。

ConnectExceptionUnknownHostException 都可能在没有连接时出现。 UnknownHostException 在 DNS 缓存中没有条目时发生,ConnectException 在 DNS 缓存中有条目但无法访问主机时发生。

简单地捕获 IOException 并重试(但不是永远,而是增加停顿并在一段时间后放弃)。

唯一的特殊情况是无效 URL 或来自服务器的永久性错误(如无效身份验证,...)。