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

标签 java exception java-8

我正在我的应用程序中进行远程调用。我想处理不同的异常并在出现相应异常时执行不同的任务。

我正在调查 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 都可能发生。当 DNS 缓存中没有条目时,会发生 UnknownHostException;当 DNS 缓存中存在条目但无法访问主机时,会发生 ConnectException

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

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

关于java - 在Java中进行远程调用时要处理哪些异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50811372/

相关文章:

java - JPanel 在调整大小时会被重新绘制几次,有时根本不会

java - Java Swing 中 JTextfield 中的控制空格、数字、特殊字符、字符串

Python 异常 - 如何自动设置 args 属性?

java - Spring Boot Tomcat 部署不工作 Tomcat 7

java - 我这里有什么大O符号?

java 。实例变量长度

c# - 创建新行并从小型 CSV 文件添加到数据表时出现 OOM 异常

java - 使用 LocalDate 获取过去的星期和年份

java 8并行流按给定值组织列表

java - stream.spliterator() 是否关闭流?