【问题标题】:Elasticsearch RestHighLevelClient (6.0.0) -- TimeoutException on runtimeElasticsearch RestHighLevelClient (6.0.0) -- TimeoutException on runtime
【发布时间】:2018-01-31 03:53:51
【问题描述】:

在弹性搜索服务器中索引(存储)文档时,我们的应用程序遇到超时异常。它不经常发生,但大约每天一次。以下是详细信息。

pom.xml

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.0.0</version>
</dependency>

初始化

@Bean
public RestHighLevelClient buildHighLevelClient() {
    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(httplist.toArray(new HttpHost[]{})));
    return client;
}

异常信息

java.lang.RuntimeException: error while performing request
at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:682)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:220)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:192)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:428)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:414)
at org.elasticsearch.client.RestHighLevelClient.bulk(RestHighLevelClient.java:229)
......
Caused by: java.util.concurrent.TimeoutException
at org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:364)
at org.apache.http.nio.pool.AbstractNIOConnPool.processNextPendingRequest(AbstractNIOConnPool.java:344)
at org.apache.http.nio.pool.AbstractNIOConnPool.release(AbstractNIOConnPool.java:318)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.releaseConnection(PoolingNHttpClientConnectionManager.java:303)
at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.releaseConnection(AbstractClientExchangeHandler.java:239)

【问题讨论】:

  • 在我的本地机器上同时索引多个文档时遇到了同样的问题
  • 你找到答案了吗?

标签: elasticsearch java.util.concurrent rest-client timeoutexception


【解决方案1】:

我通过以下设置解决了这个问题:

RestClientBuilder builder = RestClient.builder(
      new HttpHost("localhost", 9200, "http")); builder.setRequestConfigCallback(
      new RestClientBuilder.RequestConfigCallback() {
         @Override
         public RequestConfig.Builder customizeRequestConfig(
                 RequestConfig.Builder requestConfigBuilder) {
             return requestConfigBuilder.setConnectionRequestTimeout(-1); 
         }
     });

底层 Apache RestClient 在其连接池中有 AFAIK 10 个并发连接的限制。因此,如果有超过 10 个并发请求,其他请求会排队并可能会达到 org.elasticsearch.client.RestClientBuilder 中设置的默认 DEFAULT_CONNECTION_REQUEST_TIMEOUT_MILLIS = 500;

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2020-10-14
    • 2019-01-22
    • 2020-06-28
    • 2021-04-24
    • 1970-01-01
    • 2021-08-11
    • 2020-06-18
    • 1970-01-01
    相关资源
    最近更新 更多