Я пытаюсь использовать поиск elasti c таким образом, чтобы клиент был закрыт через 1 час или около того. Я заметил, что в моих тестах он закрывается через 30 минут, и я не могу понять, в чем проблема, это Вот как я реализовал свой класс клиента ElasticSearch:
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 минут, и я не могу понять причину.