Весенняя загрузка и Elasticsearch: Исключение недоступного хоста: Хост ‘локальный хост/:9200’ недоступен

#spring-boot #elasticsearch

Вопрос:

У меня очень простой вариант использования, я просто хочу использовать Spring Boot (2.5.2) для помещения документов в индекс elasticsearch. Я продолжаю видеть эту ошибку при запуске приложения:

Вызвано: org.springframework.data.elasticsearch.клиент.Исключение недоступного хоста: Хост ‘localhost/:9200’ недоступен. Состояние кластера находится в автономном режиме.

Похоже, он просто загружает хост и порт по умолчанию для elasticsearch, но я не уверен, почему. Я пробовал перемещать объекты недвижимости. Я пытался не использовать репозиторий, а вместо этого просто использовать RestHighLevelClient. Несмотря ни на что, я продолжаю получать эту ошибку при запуске.

Я использую spring-boot-starter-data-elasticsearch

 implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-elasticsearch'  

Вот мое приложение.yml

 spring:  elasticsearch:  rest:  uris: lt;my hostgt;:lt;my portgt;  username: lt;usernamegt;  password: lt;passwordgt;  

Объект документа, который я пытаюсь отправить

 @Document(indexName = "#{@environment.getProperty('indices.someobject')}", createIndex = false) public class SomeObjectDocument{  @Id  private String id;   private SomeObject object;   public String getId() {  return id;  }   public void setId(String id) {  this.id = id;  }   public SomeObject getSomeObject () {  return someObject;  }   public void setSomeObject (SomeObject someObject ) {  this.someObject = someObject;  } }  

Конфигурация Клиента

 @Configuration @EnableElasticsearchRepositories(basePackages = "com.some.company.project.elastic.repository") public class ElasticClientConfig {  @Value("${spring.elasticsearch.rest.username}")  private String elasticUsername;   @Value("${spring.elasticsearch.rest.password}")  private String elasticPassword;   @Value("${spring.elasticsearch.rest.uris}")  private String uri;   @Bean  public RestHighLevelClient elasticsearchClient() {  LOG.info(uri);  ClientConfiguration clientConfiguration = ClientConfiguration.builder()  .connectedTo(uri)  .usingSsl()  .withBasicAuth(elasticUsername, elasticPassword)  .build();   return RestClients.create(clientConfiguration).rest();  }   @Bean  public ElasticsearchOperations elasticsearchOperations() {  return new ElasticsearchRestTemplate(elasticsearchClient());  } }  

А для репозитория я просто создал его и не добавил никаких других методов, потому что мне просто нужно сохранить

 public interface SomeObjectRepository extends ElasticsearchRepositorylt;SomeObjectDocument, Stringgt; {  }  

Комментарии:

1. что у тебя там внутри lt;my hostgt; ? если это host/ так, то вам нужно удалить /

2. В свойстве spring.elasticsearch.rest.uris моего приложения.yml у меня есть что-то вроде myhost.company.com:443 , поэтому в нем нет / . Похоже, сообщение об ошибке, которое я на самом деле вижу, немного оборвалось. В сообщении об ошибке говорится, что этот хост недоступен: «локальный хост/lt;неразрешенgt;:9200». Я думаю, что lt;неразрешенныйgt; исходит из моего @документа, в котором я установил имя индекса, и он не может его разрешить? Я просто не понимаю, почему он использует localhost.

3. Привет @H. Миллер, ты когда-нибудь устранял эту проблему? У меня та же проблема с моей стороны

Ответ №1:

Я думаю, что ваша проблема связана с экземпляром elasticsearch. Вы уверены, что экземпляр elasticsearch работает на порту 9200 ?

Комментарии:

1. Нет, elasticsearch работает на совершенно другом хосте. Я настроил его в свойстве spring.elasticsearch.rest.uris моего приложения. yml, например «myhost.company.com:443». Когда я регистрирую его в ElasticClientConfig с помощью «LOG.info(uri);» он печатает «myhost.company.com:443» правильно. Я не знаю, откуда берется localhost:9200, кроме того, что он, по-видимому, используется по умолчанию для elasticsearch.