腾讯云授权服务中心
五万用户的选择,您身边的云计算顾问
发布日:2022-02-18 15:01 阅读数:
这个类使用比较简单,先写一个Demo,实现一个简单的域名解析。
/** * 重写Java自定义DNS解析器,非负载均衡 * * @return */ private static DnsResolver getDnsResolver2() { InMemoryDnsResolver dnsResolver = new InMemoryDnsResolver(); try { dnsResolver.add("fun.tester", InetAddress.getByName("127.0.0.1")); } catch (Exception e) { e.printStackTrace(); } return dnsResolver; }
这样我们就可以把fun.tester
解析到127.0.0.1
上了,后面我会进行一个简单的测试。
我们先看这个Demo。
/** * 重写Java自定义DNS解析器,负载均衡 * * @return */ private static DnsResolver getDnsResolver() { return new SystemDefaultDnsResolver() { @Override public InetAddress[] resolve(final String host) throws UnknownHostException { if (host.equalsIgnoreCase("fun.tester")) { return new InetAddress[]{InetAddress.getByName("127.0.0.1")}; } else { return super.resolve(host); } } }; }
通过源码可以看出,两个实现类都是通过实现org.apache.http.conn.DnsResolver
这个接口中org.apache.http.conn.DnsResolver#resolve
方法。我们自己可以完全自己实现。
/** * 自定义本地DNS解析器实现 * * @return */ private static DnsResolver getDnsResolver3() { return new DnsResolver() { @Override public InetAddress[] resolve(final String host) throws UnknownHostException { if (host.equalsIgnoreCase("fun.tester")) { return new InetAddress[]{InetAddress.getByName("127.0.0.1")}; } else { return InetAddress.getAllByName(host); } } }; }
仔细看不难发现,其实就是代码缝合怪。
首先我在本地起一个HTTP服务,端口12345,非常简单。代码如下:
static void main(String[] args) { def util = new ArgsUtil(args) def server = getServerNoLog(util.getIntOrdefault(0, 12345)) server.response("Have Fun ~ Tester !") def run = run(server) waitForKey("fan") run.stop() }
然后我准备一个测试脚本:
public static void main(String[] args) { String url = "http://fun.tester:12345/" def get = getHttpGet(url) def funtester = { fun { getHttpResponse(get) } } 10.times { funtester() } }
控制台日志输出:
INFO-> 27.214 F-1 请求uri:http://fun.tester:12345/ , 耗时:304 ms , HTTPcode: 200 INFO-> 27.214 F-4 请求uri:http://fun.tester:12345/ , 耗时:304 ms , HTTPcode: 200 INFO-> 27.214 F-10 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-5 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-2 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-8 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-3 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-7 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-6 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200 INFO-> 27.214 F-9 请求uri:http://fun.tester:12345/ , 耗时:305 ms , HTTPcode: 200
三种实现方式控制台输出大同小异,都能满足我们的需求,当然仅仅是功能测试场景下。下期会结合源码分析如何实现负载均衡。
编辑:航网科技 来源:腾讯云
本文版权归原作者所有 转载请注明出处
Copyright © 2011-2020 www.hangw.com. All Rights Reserved 深圳航网科技有限公司 版权所有 增值电信业务经营许可证:粤B2-20201122 - 粤ICP备14085080号
微信扫一扫咨询客服
全国免费服务热线
0755-36300002