1

HTTPBuilder ライブラリを使用してアプリケーション サーバーを呼び出す Grails/Groovy アプリケーションがあります。リソースの使用率が上昇しているため、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
}
4

1 に答える 1

0

私たちのアプリケーションにも同様の問題がありました (ただし、クライアントのインスタンスは 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
    }
}
于 2013-01-08T11:17:31.380 に答える