0

これは、 https://github.com/searchbox-io/Jest/blob/master/jest/src/main/java/io/searchbox/client/http/JestHttpClient.javaのコードに関するものです 。

このコード スニペットでは

public <T extends JestResult> T execute(Action<T> clientRequest) throws IOException {
    HttpUriRequest request = prepareRequest(clientRequest);
    HttpResponse response = httpClient.execute(request);

    return deserializeResponse(response, request, clientRequest);
}

private <T extends JestResult> T deserializeResponse(HttpResponse response, Action<T> clientRequest) throws IOException {
    StatusLine statusLine = response.getStatusLine();
    return clientRequest.createNewElasticSearchResult(
            response.getEntity() == null ? null : EntityUtils.toString(response.getEntity()),
            statusLine.getStatusCode(),
            statusLine.getReasonPhrase(),
            gson
    );
}

応答を受け取った後、次のようなことをすべきではありません

response.close()

この特定のスタック オーバーフロー スレッドHttpClient 4.0.1 - 接続を解放するには? を使用して応答エンティティを消費することについて言及

EntityUtils.consume(HttpEntity)

するだけでEntityUtils.toString(response.getEntity())十分ですか?

4

1 に答える 1

1

EntityUtils.toString(response.getEntity())正常に終了できれば十分です。たとえば、UnsupportedEncodingException がスローされた場合、応答は読み取られずtoString、接続はブロックされます。私の提案は、接続のハングを防ぐためEntityUtils.consume(HttpEntity)にブロックで呼び出すことです。finally

于 2016-03-21T12:56:20.117 に答える