Java自定义DNS解析器负载均衡实现( 二 )

这下我们就能看出每个线程都执行了一次org.apache.http.impl.conn.SystemDefaultDnsResolver#resolve方法,获取到了IP也是随机的,而且每次请求的耗时都是比较长的 。这里让我心生疑惑,相当于每个线程请求都是重新重建了连接,于是就有了下面的测试 。
单个连接这里我把HttpClient的连接池的最大连接数改成了1:public static int MAX_PER_ROUTE_CONNECTION = 1;或者public static int MAX_TOTAL_CONNECTION = 1;,这个之前分享过,这里不多讲了,上用例:
用例同多线程用例【Java自定义DNS解析器负载均衡实现】控制台输出:
INFO-> 02.928 main###### #### ####### ################## ############################### ########################### #####################################INFO-> 03.648 Deamon 守护线程开启!INFO-> 03.910 F-5/0.0.0.0INFO-> 03.961 F-6请求uri:http://fun.tester:12345/ , 耗时:299 ms , HTTPcode: 200INFO-> 03.961 F-5请求uri:http://fun.tester:12345/ , 耗时:299 ms , HTTPcode: 200INFO-> 03.961 F-4请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-7请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-3请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-2请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-1请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-9请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-8请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200INFO-> 03.961 F-10 请求uri:http://fun.tester:12345/ , 耗时:300 ms , HTTPcode: 200WARN-> 04.673 Deamon 异步线程池关闭!这里看到虽然我起了10个线程分别执行请求,但是每个请求的耗时都是非常长的,但是只有F-5这个线程执行了一次org.apache.http.impl.conn.SystemDefaultDnsResolver#resolve方法,由于HttpClient只有一个连接 。所以应当是每个连接创建的时候会调用org.apache.http.impl.conn.SystemDefaultDnsResolver#resolve方法,而每个线程请求耗时比较高,原因是因为每个线程去获取到链接资源之后,会重新进行建联的过程导致的 。
实践出真知,奇怪的知识又增加了 。




推荐阅读