首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimeoutException搜索RestHighLevelClient (6.0.0) --运行时的Elasticsearch

TimeoutException搜索RestHighLevelClient (6.0.0) --运行时的Elasticsearch
EN

Stack Overflow用户
提问于 2018-01-31 11:53:51
回答 1查看 1.2K关注 0票数 5

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

pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.0.0</version>
</dependency>

初始化

代码语言:javascript
复制
@Bean
public RestHighLevelClient buildHighLevelClient() {
    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(httplist.toArray(new HttpHost[]{})));
    return client;
}

异常信息

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-08-28 20:25:12

我使用以下设置解决了这个问题:

代码语言:javascript
复制
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在其连接池中有一个限制为AFAIK10并发连接。因此,如果并发请求超过10个,则额外的请求将排队,并可能命中org.elasticsearch.client.RestClientBuilder中设置的默认DEFAULT_CONNECTION_REQUEST_TIMEOUT_MILLIS = 500;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48534201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档