我有一个Grails/Groovy应用程序,它使用HTTPBuilder库来调用我们的应用服务器。随着资源利用率的提高,我们正在寻找一种方法来汇集我们的HTTP连接。我发现的唯一支持池化的HTTPBuilder版本是AsyncHTTPBuilder,但我们的调用必须同步进行。有没有人有过使用HTTPBuilder连接池化的经验,或者有没有我们应该用来使用池化连接发出请求的备用库?
下面是我们使用HTTPBuilder库的一个示例:
def get(event, request) {
def http = new HTTPBuilder(appServerURL)
def result = ""
http.client.cookieStore.addCookie
sessionHolderService.getVPMClientUser().apiSessionCookie
http.request(GET, TEXT) {
uri.path = "/path/on/appserver"
uri.query = [event: event, request: request, responseFormat: 'text/xml']
response.success = { resp, text ->
result = text.text
}
response.failure = { resp, text ->
result = text.text
throw new VPMClientException(resp.status, resp.message, text.text)
}
}
result
}发布于 2013-01-08 19:17:31
我们的应用程序也遇到了类似的问题(但仅限于客户端的一个实例)。以下解决方案基于Gpars。这些操作被放入发送队列中,然后由任务使用。
final def http = ...
final DataflowQueue sendQueue = new DataflowQueue()
final DataflowVariable finished = new DataflowVariable<Boolean>()
def sendQueueTask = task {
while(!finished.isBound()){
def sendAction = sendQueue.getVal(1, TimeUnit.SECONDS)
if(sendAction)
sendAction()
}
}然后,这些操作被包装在sendQueue中添加的闭包中:
def get(event, request) {
sendQueue << {
// your get implementation
}
}https://stackoverflow.com/questions/14205843
复制相似问题