У меня возникают спорадические проблемы при отправке документов в индекс.
В результате иногда возникает следующая ошибка при попытке отправить документ в индекс. но если я отправлю другой документ сразу после того, как второй будет успешно отправлен без ошибок.
Я попытался найти во всем Интернете похожие проблемы, но это больше похоже на проблему с зависимостью, чем на Сам Elasticsearch.
Сообщение об ошибке следующее:
java.util.concurrent.ExecutionException: org.springframework.data.elasticsearch.ElasticsearchException: Error while index for request: index {[converterlog_test][_doc][d388d3be-2e9e-4474-a952-e4a6b146487f],
source[{"logId":"d388d3be-2e9e-4474-a952-e4a6b146487f","date":"2020-02-10T13:32:24.138","output":"Compilation in progress...\nCompilation successful","filename":"CDNORNCNCINT02380","exitCode":0,"maybeError":false}]}
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at no.intility.CdrConverter.Controllers.CdrConverterController.startCdrConverter(CdrConverterController.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
...
Caused by: java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]
at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:944)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:233)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1764)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1734)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1696)
at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:928)
at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.index(ElasticsearchRestTemplate.java:694)
... 24 more
В моем проекте используются следующие классы / рамки / зависимости.
Зависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
Класс модели :
@Document(indexName = "#{ configBean.indexName }", type = "_doc")
public class ConverterLog {
@Id @Field(type = FieldType.Text)
private String logId;
@Field(type = FieldType.Date)
private String date;
@Field(type = FieldType.Text)
private String output;
@Field(type = FieldType.Text)
private String filename;
@Field(type = FieldType.Integer)
private int exitCode;
@Field(type = FieldType.Boolean)
private boolean maybeError;
public ConverterLog(String output, String filename, int exitCode, boolean maybeError) {
setDate(LocalDateTime.now(ZoneId.of("UTC")).toString());
setLogId(UUID.randomUUID().toString());
setOutput(output);
setFilename(filename);
setExitCode(exitCode);
setMaybeError(maybeError);
}
... Getters & setters
Репозиторий:
public interface ConverterLogRepository extends ElasticsearchRepository<ConverterLog, String> {
}
Служба:
@Service
public class ConverterLogService {
private ConverterLogRepository converterLogRepository;
public ConverterLogService(ConverterLogRepository converterLogRepository) {
this.converterLogRepository = converterLogRepository;
}
public ConverterLog submitTerminalOutput(String terminalOutput, String filename, int exitcode, boolean maybeError) {
return converterLogRepository.index(new ConverterLog(terminalOutput, filename, exitcode, maybeError));
}
}