Groovy的AsyncHTTPBuilder不会异步执行请求

时间:2011-03-08 07:36:54

标签: asynchronous groovy httpbuilder

我正在玩AsyncHTTPBuilder(v0.5.1)但是,我无法让它工作,所以它是异步执行请求。请检查下面的代码。看起来所有请求都是从同一个线程完成的:

@Test public void testPoolsizeAndQueueing() {
def http = new AsyncHTTPBuilder( poolSize : 5 ,
                                 uri : 'http://ajax.googleapis.com/ajax/services/search/web' )

def responses = []
/* With one thread in the pool, responses will be sequential but should
 * queue up w/o being rejected. */
10.times {
responses << http.get( query : [q:'Groovy', v:'1.0'] ) { return Thread.currentThread().name }
responses << http.get( query : [q:'Ruby', v:'1.0'] )  { return Thread.currentThread().name }
responses << http.get( query : [q:'Scala', v:'1.0'] )  { return Thread.currentThread().name }
}
def timeout = 60000
def time = 0
while ( true ) {
    if ( responses.every{ it.done ? it.get() : 0 } ) break
    print '.'
    Thread.sleep 2000
    time += 2000
if ( time > timeout ) assert false
}
responses.each { println it.get() }
http.shutdown()
}

输出:     ..pool -3-线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池3线程1     池-3-线程1

2 个答案:

答案 0 :(得分:2)

我相信这是预期的。

查询正在异步运行在不同的线程中,但{ return Thread.currentThread().name }闭包在调用it.get()时运行(与主脚本运行在同一个线程中)

希望这能解释

修改

你是对的。

使用

运行
def http = new AsyncHTTPBuilder( poolsize:5,
                                 uri:'http://ajax.googleapis.com/ajax/services/search/web' )

无法正常工作......并将其更改为:

def http = new AsyncHTTPBuilder( threadPool:java.util.concurrent.Executors.newFixedThreadPool( 5 ),
                                 uri:'http://ajax.googleapis.com/ajax/services/search/web' )

让它发挥作用。甚至尝试过0.5.2-SNAPSHOT,但也遇到了同样的问题

我已将其报告为错误:http://jira.codehaus.org/browse/GMOD-174

越过它的手指将被修复(或者我们会发现为什么我们做错了)v 0.5.2

答案 1 :(得分:2)

我已经修复了这个bug并部署了一个新的0.5.2-SNAPSHOT。因此它现在可以使用最新的快照。

我打算用这个修补程序发布0.5.2 final,并很快修复其他一些bug。

对于记录,命名参数实际上是poolSize而不是poolsize,但这不是问题的原因。 (但这是我计划在0.5.2中修复的问题 - http://jira.codehaus.org/browse/GMOD-175。)

感谢Tim Yates报告错误。