Jon*_*nyD 3 java apache nio http elasticsearch
我在 HttpAsyncRequestExecutor 上遇到了问题。
我正在使用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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这里的例外:
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)
Run Code Online (Sandbox Code Playgroud)
我不知道连接关闭的真正原因是什么。完全相同的请求在kopf 中运行良好并返回有效的搜索结果。另外,我不会打电话给任何restClient.close()或类似的东西。
问题可能出在哪里的任何想法?输入的结束是否是导致关闭连接状态的原因(根据org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(conn))?如果是,那是什么输入?
谢谢
更新:
我怀疑问题是关系到Tomcat的HttpClient,因为这段代码工作正常在集成测试(即返回结果)...但它不工作(得到相同的ConnectionClosedException),当我通过做一个Tomcat部署REST请求“界面”
有这方面的灯吗?
问题是端口错误。对于 REST 请求,端口应该是 9200(而不是像配置的 9300)。有关 elasticsearch 端口的更多信息。
我希望 elasticsearch 可以制作更明确的错误日志或提示,例如“您是否使用正确的端口连接?” 当人们尝试使用内置客户端以外的任何东西访问 9300 端口时。