【问题标题】:Pooling connections with HTTPBuilder使用 HTTPBuilder 池化连接
【发布时间】:2012-12-21 18:23:27
【问题描述】:

我有一个 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
}

【问题讨论】:

    标签: grails groovy connection-pooling synchronous httpbuilder


    【解决方案1】:

    我们的应用程序也有类似的问题(但仅限于一个客户端实例)。以下解决方案基于 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
        }
    }
    

    【讨论】:

    • 谢谢,这似乎可以用于我们的目的。一个问题 - 您选择将 http 变量声明移到函数调用之外是有原因的吗?它只是持续使用相同的连接吗?感谢您的意见。
    • 你是对的,http 变量只定义了一次,应该声明为final。一切都在标有@Singleton 注释的类中。
    • 不幸的是,这仍然无法发送请求。我需要从控制器启动 sendQueueTask 吗?我正在按照您在上面发布的内容进行操作,但在另一台服务器上没有看到任何请求。
    • 我永远无法让这个解决方案发挥作用。我现在正在考虑放弃 HTTPBuilder,只使用一个普通的旧 apache HTTPClient,它支持连接持久性。
    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 2013-12-08
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多