Java SRV记录处理
为了好玩,我正在玩一个非常基本的clientserver项目,我认为如果无法访问主服务器,那么实现一个回退系统会很好。我计划通过SRV记录查找来实现这一点 值得一提的是,这就是我获取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.
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
- 取消完成服务中的所有任务