Java SRV记录处理

Java SRV记录处理,java,dns,Java,Dns,为了好玩,我正在玩一个非常基本的clientserver项目,我认为如果无法访问主服务器,那么实现一个回退系统会很好。我计划通过SRV记录查找来实现这一点 值得一提的是,这就是我获取SRV记录的方式 String query = "_test._tcp.my.domain.com"; Hashtable<String, String> environment = new Hashtable<String, String>(); environment.put("java.

为了好玩,我正在玩一个非常基本的clientserver项目,我认为如果无法访问主服务器,那么实现一个回退系统会很好。我计划通过SRV记录查找来实现这一点

值得一提的是,这就是我获取SRV记录的方式

String query = "_test._tcp.my.domain.com";
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
environment.put("java.naming.provider.url", "dns:");
InitialDirContext dirContext = new InitialDirContext(environment);
Attributes records = dirContext.getAttributes(query, new String[] {"SRV"});
String query=“\u test.\u tcp.my.domain.com”;
Hashtable环境=新的Hashtable();
put(“java.naming.factory.initial”、“com.sun.jndi.dns.DnsContextFactory”);
put(“java.naming.provider.url”,“dns:”);
InitialDirContext=新的InitialDirContext(环境);
Attributes records=dirContext.getAttributes(查询,新字符串[]{“SRV”});
所以我设置了一些SRV记录,所有这些,代码都可以很好地检索它们。我不知道的是,在建立了一个正确排序记录的列表之后,如何才能找到要使用的记录

我知道我可以直接连接到最低优先级记录的主机/端口,如果连接失败,请转到下一个主机/端口,等等。但是如果有相当数量的记录,并且只有一个具有最高优先级的记录工作,该怎么办?无论是谁在使用客户端,都必须等待每个低优先级记录连接超时,然后才能最终找到一个工作的连接


我想做的是无缝地找到工作主机/端口的记录,因为用户不必等待可能的时间。

您可以在单独的线程中启动连接,只需等待一个线程完成即可

请考虑使用

简言之:

  • 实现callable以返回所需的值
  • 创建完成服务
  • 向it提交作业
  • 调用completionService.poll
  • 取消完成服务中的所有任务

感谢您的解释。我不知道CompletionService的存在。当我回到家后,我会尝试实现这一点,然后再联系你!当然已经做了很多绕来绕去的工作,还没有机会实施。不过,这个概念应该行得通。