Java 处理由于远程主机无响应而导致的拒绝服务

Java 处理由于远程主机无响应而导致的拒绝服务,java,io,Java,Io,在服务器启动过程中,我访问远程主机以获取一些初始化数据。不幸的是,所讨论的远程主机因随机对连接不响应而臭名昭著(假设有3%的时间发生这种情况)。结果是连接无限期地挂起(可能永远挂起),我的服务器无法在合理的时间内启动(如果有的话)。它已经挂了一个小时了 连接超时: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(connectionTimeout); for (i

在服务器启动过程中,我访问远程主机以获取一些初始化数据。不幸的是,所讨论的远程主机因随机对连接不响应而臭名昭著(假设有3%的时间发生这种情况)。结果是连接无限期地挂起(可能永远挂起),我的服务器无法在合理的时间内启动(如果有的话)。它已经挂了一个小时了

连接超时:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(connectionTimeout);

for (int i = 0; i <= connectionRetries; i++) {
  try {
    log.info("Establishing connection to ClassNotes service.");
    conn.connect();
    break;
  } catch (SocketTimeoutException e) {
    log.warn("Timed out connecting to ClassNotes service.");
  }
}
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setConnectTimeout(connectionTimeout);

对于(int i=0;i除了连接超时之外,您还可以将此逻辑放入可运行对象中,然后创建一个与该服务联系的线程。如果该线程在指定的时间内未完成,则杀死该线程并重试。执行此操作直到它工作或达到重试限制,然后继续执行n启动。

D'oh!我不知道我怎么会错过那个API方法。我认为这是诉诸线程之前的一个合乎逻辑的步骤。谢谢!谢谢Kaleb。取决于setReadTimeout()是否有效,我可能不得不求助于此。啊,伙计,我忘记了setReadTimeout!我以前也在客户端项目中使用过它,哈哈。