java - 使用 java 为弹性搜索客户端设置超时
问题描述
我正在尝试以客户端将在 1 小时左右后关闭的方式使用弹性搜索客户端类:
public class ElasticSearchClient implements Closeable {
public static final String INDEX = EnvConf.getProperty("elastic.tests_report.index");
private static final String HOST = EnvConf.getProperty("elastic.host");
private static final int PORT = EnvConf.getAsInteger("elastic.port");
private final RestHighLevelClient restClient;
public ElasticSearchClient() {
RestClientBuilder builder = RestClient.builder(
new HttpHost(HOST, PORT))
.setRequestConfigCallback(
requestConfigBuilder -> requestConfigBuilder
.setConnectTimeout(5000)
.setSocketTimeout(10000))
.setMaxRetryTimeoutMillis(90000);
restClient = new RestHighLevelClient(builder);
}
public IndexResponse index(String index , String type , XContentBuilder contentBuilder) throws IOException {
IndexRequest indexRequest = new IndexRequest(index, type)
.source(contentBuilder);
return restClient.index(indexRequest , RequestOptions.DEFAULT);
}
public SearchResponse query(QueryBuilder queryBuilder, int maxHits, String...indices) throws IOException {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS))
.size(maxHits)
.sort(new FieldSortBuilder("start_timestamp").order(SortOrder.DESC));
SearchRequest searchRequest = new SearchRequest(indices);
searchRequest.source(searchSourceBuilder.query(queryBuilder));
return restClient.search(searchRequest , RequestOptions.DEFAULT);
}
@Override
public void close() throws IOException {
restClient.close();
}
}
我以为它会运行 1.5 小时,我看到 30 分钟后它停止索引客户端,这是我收到的错误消息:
java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
at org.apache.http.util.Asserts.check(Asserts.java:46)
at org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90)
at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123)
at org.elasticsearch.client.RestClient.performRequestAsync(RestClient.java:533)
at org.elasticsearch.client.RestClient.performRequestAsyncNoCatch(RestClient.java:516)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:228)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1762)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1732)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1694)
at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:926)
at com.indeni.automation.api.db.ElasticSearchClient.index(ElasticSearchClient.java:46)
at com.indeni.automation.core.runner.testng.TestListener.updateDataSourceWithTestResult(TestListener.java:215)
at com.indeni.automation.core.runner.testng.TestListener.onFinish(TestListener.java:125)
at org.testng.TestRunner.fireEvent(TestRunner.java:1239)
at org.testng.TestRunner.afterRun(TestRunner.java:1030)
at org.testng.TestRunner.run(TestRunner.java:636)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.access$000(SuiteRunner.java:39)
at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:400)
at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我注意到它在 30 分钟后停止工作,我不知道原因。
解决方案
推荐阅读
- java - 需要更改通过 JMX 公开的指标的名称
- angular - 在开发配置上打开源映射代码的问题
- google-apps-script - Bigquery 的自定义连接器 - Data Studio 用于缓存数据
- c++ - 如何从给定键的 interval_maps 中获取值?
- android - 为 android 构建 ionic/react - 无效的项目类型“react”
- sql - Calculate count after recursive CTE in ms sql
- asp.net - IDataProtectionProvider 的目的字符串数组如何将默认值作为项目的物理路径?
- c# - 为什么当我得到我的路径时会有第二个'\'
- angular - Ionic & Angular - 无法识别离子选择空值
- ios - 当应用程序进入后台时,navigationItem 的 titleView 中的 searchBar 消失