我在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();
}
});
}
}
此处有例外:
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)
)?如果是,那是什么输入?
由于
更新
我怀疑问题与Tomcat的HttpClient
有关,因为此代码在集成测试中正常工作(即返回结果)......但它不起作用(得到相同的{ {1}})当我通过tomcat部署&#34;接口&#34;发出REST请求时
这有什么亮点吗?
答案 0 :(得分:2)
问题是端口错了。对于REST请求,端口应为9200(而不是像配置的那样9300)。 More info on elasticsearch ports.
我希望elasticsearch可以制作更明确的错误日志或提示,例如&#34;您是否正确连接到正确的端口?&#34;当一个人尝试使用内置客户端以外的任何东西访问9300端口时。