Ning的AsyncHttpClient构建Futures方式太慢(在这种情况下)

时间:2014-07-21 20:37:44

标签: java asynchttpclient ning

在我的代码中有一个构建Futures的循环,这是减速的方法。构建1个Future需要大约数百毫秒。我只是在谈论设置Future对象而不是关于获得Reponse。这是代码:

while(settings.getCrawlerQueue().size() < settings.getCrawlerQueueSize()) {
    Task task = taskQueue.poll();
    task = setFutureInTask(assignment, task);
}

setFutureInTask()代码:

public Task setFutureInTask(String assignment, Task task) {
    task.setParserAssignment(assignment);
        switch(assignment){

        case "stuff":
            task.setFuture(asyncClientStandard
                        .prepareGet("http://"+task.getDomain())
                        .execute()
                    );
            break;
[...]

我在一些我读过的东西(无法找到它:/)中尝试了不同的Java JDK和版本,但这没有帮助。还尝试JDKAsyncHttpProvider而不是默认的NettyAsyncHttpProvider,这更快,但也提供了非常多的Flase-Negatives(它似乎取消非常(!)经常有效的域)。 我注意到的是:我住在德国和德国.de-domains比来自西班牙等其他国家的域名更快。

非常感谢任何狂野的猜测! :)

[EDIT]

只需切换到另一台DNS服务器即可解决问题。

1 个答案:

答案 0 :(得分:1)

在编写和试验我的HTTP负载测试插件时,我遇到过类似的(如果不是完全相同的)问题。在创建未来时,名称解析似乎是同步,如果您的DNS缓存无法正常工作,则每次都要支付整个DNS查找往返。

关于如何修复这个问题,很难说。我通常会切换到另一个不会显示此问题的网络接口。