基于多个DNS结果的Java传出TCP连接故障转移

Bry*_*eld 4 java connection dns failover tcp

如果我使用连接new Socket("unit.domain.com", 100)并且unit.domain.comDNS记录在A记录中有多个IP地址..如果连接失败,Java是否会像浏览器一样自动连接到列表中的其他地址之一?还是必须手动实施?

bes*_*sss 5

没有!通过新的Socket(String,int)创建套接字会导致类似的解析

addr = InetAddress.getByName(hostname);
Run Code Online (Sandbox Code Playgroud)

这是一个快捷方式

return InetAddress.getAllByName(host)[0];
Run Code Online (Sandbox Code Playgroud)

地址解析在Socket c-tor中执行.

如果必须重新连接(故障转移),请使用InetAddress.getAllByName(host)返回的结果,随机化(或使用循环法)并连接到必要的地址.

编辑:如果你需要连接一些可能的失败,你最好使用Socket类的connect方法和超时.还要确保关闭甚至发生故障的插槽(尤其是通道),因为它们可能会泄漏*Nix上的FD.