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

基于多个DNS结果的Java传出TCP连接故障切换,java,tcp,connection,dns,failover,Java,Tcp,Connection,Dns,Failover,如果我使用新套接字(“unit.domain.com”,100)建立连接,并且unit.domain.comDNS记录在a记录中有多个IP地址。。如果连接失败,Java是否会像浏览器一样自动连接到列表中的其他地址之一?还是必须手动执行?否! 通过新套接字(String,int)创建一个套接字会导致这样的解析 addr = InetAddress.getByName(hostname); 哪一条是你的捷径 return InetAddress.getAllByName(host)[0]; 地址

如果我使用
新套接字(“unit.domain.com”,100)
建立连接,并且
unit.domain.com
DNS记录在a记录中有多个IP地址。。如果连接失败,Java是否会像浏览器一样自动连接到列表中的其他地址之一?还是必须手动执行?

否! 通过新套接字(String,int)创建一个套接字会导致这样的解析

addr = InetAddress.getByName(hostname);
哪一条是你的捷径

return InetAddress.getAllByName(host)[0];
地址解析在套接字c-tor中执行

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


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

好的,我该问了。什么是*Nix?它代表“类似于unix”,在linux/unix上关闭套接字是两个阶段的操作,由于一些缺点,第二阶段可能无法完成,并留下臭名昭著的FD泄漏,除非正确调用close()。因此,无论connect()是否成功,请确保关闭任何SocketChannel(套接字)