У меня проблема с HttpAsyncRequestExecutor.Elasticearch Rest Client - ConnectionClosedException при вызове executeRequestAsync
Я использую elasticsearch Java Rest Client и я всегда получаю ConnectionClosedException
(см ниже), когда я называю performRequestAsync
:
// variables (all with valid format):
// endpoint is just a List<String> with "14655/_search"
// params is just a Map<String, String> with
// "pretty", "true"
// "search_type", "query_then_fetch"
// entity is just a HttpEntity entity with the Json body request
final int numRequests = endpoints.size();
final CountDownLatch latch = new CountDownLatch(numRequests);
try (Timer.Context ctx = this.requestTimer.time()) {
for (final String endpoint : endpoints) {
// ERROR hapens here:
restClient.performRequestAsync("GET", endpoint, params, entity,
new ResponseListener() {
@Override
public void onSuccess(final Response response) {
if (response != null) {
responses.add(response);
latch.countDown();
}
}
@Override
public void onFailure(final Exception exception) {
latch.countDown();
logger.error("could not get search results for....",exception);
exception.printStackTrace();
}
});
}
}
Исключение здесь:
org.apache.http.ConnectionClosedException: Connection closed
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(HttpAsyncRequestExecutor.java:341)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:263)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:116)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:164)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:339)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:317)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:278)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:590)
at java.lang.Thread.run(Thread.java:745)
Я не знаю, что является реальной причиной закрытия соединения. Тот же запрос хорошо работает в kopf и возвращает действительные результаты поиска. Плюс, я не называю ни одного restClient.close()
или чего-то подобного.
Любые идеи, в которых может возникнуть проблема? Является ли конец ввода причиной получения состояния закрытого соединения (согласно org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(conn)
)? Если да, то какой вклад это?
Благодаря
UPDATE:
Я подозреваю, что проблема связана с Tomcat-х HttpClient
, потому что этот код работает правильно в тесте интеграции (то есть возвращает результаты) ... Но это не работать (получить то же самое ConnectionClosedException
), когда я делаю запрос REST через развернутый «интерфейс» tomcat
Любые огни на этом?