Springboot эластичное управление поиском здоровья: ConnectException: соединение отказано - PullRequest
0 голосов
/ 25 января 2019

В моем весеннем файле yaml:

spring:
  application:
    name: myApp
  elasticsearch:
    jest:
      uris: ["http://myelasticserver:9200"]
      multi-threaded: true
      read-timeout: 10000

management:
  health:
    elasticsearch:
      indices: ["one","two"]
      response-timeout: 1000
      enabled: true

Дело в том, что Jest-клиент может быть введен и использован без каких-либо проблем. Но почему-то проверка работоспособности всегда завершается с этой ошибкой:

Не удалось выполнить проверку работоспособности Elasticsearch java.net.ConnectException: Отказано в соединении

Похоже, что URL "http://myelasticserver:9200" не использовался, а проверка работоспособности использует вместо него localhost: 9200.

Кто-нибудь знает, что я сделал не так?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

Проблема, как уже упоминалось, заключается в том, что привод использует RestClient. Если вы настроили RestHighLevelClient, конфигурация не применяется к RestClient.

Если у вас уже есть RestHighLevelClient, вы можете легко сделать доступным сконфигурированный RestClient следующим образом:

    @Bean(destroyMethod = "close")
    public RestClient restClient() {
        return restHighLevelClient().getLowLevelClient();
    }
0 голосов
/ 13 мая 2019

Spring bootasticsearch должен знать, к какому порту (и хосту) подключаться для проверки работоспособности.Добавить:

spring:
  elasticsearch:
    rest:
      uris: "myelasticserver:9200"
      #username: ""
      #password: ""

Это дополнение к уже имеющейся конфигурации.Это отдельно, потому что многие люди, как и я, используют (не http) порт 9300 эластичного поиска для реальных поисков вместо вашей части конфигурации.У меня нет управления.Мой общий конфиг дляasticsearch:

spring:
  elasticsearch:
    rest:
      uris: "myelasticserver:9200"
  data:
    elasticsearch:
      cluster-nodes: "myelasticserver:9300"
      cluster-name: "my-cluster-name"
0 голосов
/ 31 января 2019

У меня была такая же проблема, и я выяснил, в чем проблема.Для проверки работоспособности весенняя загрузка java использует RestClient, где я использовал HighLevelRestClient для индексации / поиска / удаления ES.

Итак, похоже, у вас также есть тот же случай, используете ли вы высокий или низкий (или tcp) уровеньклиент для запроса ES, но проверка работоспособности требует RestClient.Итак, решение состоит в том, чтобы переопределить bean-компонент RestClient с помощью параметров env.Добавьте следующее в ваш файл конфигурации (замените значения окружения на ваши):

@Bean(destroyMethod = "close")
public RestClient restClient() {
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY,
            new UsernamePasswordCredentials(
                    environment.getProperty("elasticsearch.username"),
                    environment.getProperty("elasticsearch.password")));

    List<HttpHost> hosts = new ArrayList<>();
    hosts.add(new HttpHost(
            environment.getProperty("elasticsearch.hosts.host.name", String.class),
            environment.getProperty("elasticsearch.hosts.host.port", Integer.class),
            "http"));

    LOGGER.info("Elasticsearch connection establishing..." + hosts.toArray().toString());

    return RestClient.builder(Iterables.toArray(hosts, HttpHost.class))
            .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
}

Дайте мне посмотреть (пожалуйста, пост) вашу конфигурацию, если это не работает.Удачи!

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...