基于多个DNS结果的Java传出TCP连接故障转移
如果我使用new Socket("unit.domain.com", 100)
并且unit.domain.com
DNS记录在A记录中有多个IP地址..如果连接失败,Java是否自动连接像浏览器那样列表中的其他地址之一? 还是必须手动实施?
没有! 通过新的Socket(String,int)创建套接字会导致类似的解析
addr = InetAddress.getByName(hostname);
这是一个捷径
return InetAddress.getAllByName(host)[0];
地址解析在Socket c-tor中执行。
如果必须重新连接(故障转移),请使用InetAddress.getAllByName(host)返回的结果,随机化(或使用循环法)并连接到必要的地址。
编辑:如果你需要连接一些可能的失败,你最好使用Socket类的connect方法和超时。 还要确保关闭甚至发生故障的套接字(尤其是通道),因为它们可能会泄漏* Nix上的FD。