J'ai un problème avec HttpAsyncRequestExecutor.Elasticsearch Rest Client - ConnectionClosedException lors de l'appel de performRequestAsync
J'utilise elasticsearch Java Rest Client et je suis toujours obtenir un ConnectionClosedException
(voir ci-dessous) quand je l'appelle 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();
}
});
}
}
Exception ici:
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)
Je ne sais pas ce que est la vraie cause de la fermeture de la connexion. La même requête fonctionne bien dans kopf et renvoie des résultats de recherche valides. De plus, je n'appelle aucun restClient.close()
ou quoi que ce soit de similaire.
Des idées où le problème pourrait être? La fin de l'entrée est-elle la cause d'un état de connexion fermé (selon org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(conn)
)? Si oui, quelle est la contribution?
Merci
MISE À JOUR:
Je soupçonne que le problème est lié à Tomcat de HttpClient
, parce que ce code fonctionne correctement dans un test d'intégration (qui est, renvoie les résultats) ... mais il n'a pas travailler (obtenir le même ConnectionClosedException
) lorsque je fais une demande REST à travers une "interface" déployée par tomcat
Des lumières sur ce?