Обработка org.elasticsearch.client.transport.NoNodeAvailableException

Привет. В моем проекте SpringBoot я настроил эластичный поиск с использованием JPA. Я использую для этого ElasticsearchRepository. Теперь для конфигурации, когда я использую localhost, все работает нормально, но когда я указываю IP-адрес, я сталкиваюсь с исключением:

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{lDnuVli1Rriy-9j1pdozZA}{27.101.12.99}{27.101.12.99:9300}] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:366) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:408) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54) ~[elasticsearch-5.6.11.jar:5.6.11] at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:571) ~[spring-data-elasticsearch-3.0.10.RELEASE.jar:3.0.10.RELEASE] at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:156) ~[spring-data-elasticsearch-3.0.10.RELEASE.jar:3.0.10.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]

Код для инициализации Elastic Search —

@Bean
    public Client client() throws Exception {

        Settings  settings = Settings.builder()
                            .put("cluster.name",getElasticCluster())
                            .build();

        return new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(getElasticHost()),getElasticPort()));
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() throws Exception {
        return new ElasticsearchTemplate(client());
    }

elasticsearch: jest: proxy: host: 27.101.12.99 port: 9300

У меня было много поиска, но ничего не помогло в моем случае. Поэтому, пожалуйста, проверьте и помогите.

Похоже, это может быть проблема с сетью. Порт 9300 обычно используется для связи внутри узла. Вы запускаете кластер? Если вы просто пытаетесь использовать REST API, то я ожидал увидеть ваш код, вызывающий порт 9200. Можете ли вы свернуть IP + порт из этого ящика?

Joe Zack 07.05.2019 15:58

да, мы запускаем кластер. Когда я пишу curl <Ip:9200>, это дает мне результат - { "имя" : "7FNHH-9", "имя_кластера" : "elasticsearch", "cluster_uuid": "yghFr84lQZ6BLAIIfDOc3w", "версия": { "номер ": "5.6.3", "build_hash": "1a2f265", "build_date": "2017-10-06T20:33:39.012Z", "build_snapshot": false, "lucene_version": "6.6.1" }, «слоган»: «Знаете, для поиска» } и когда я пишу curl<IP:9300>, то его отображение не удалось подключиться.

nitin tyagi 08.05.2019 06:12

какая версия вашего кластера? у вас активирован транспорт на порту 9300?

P.J.Meisch 08.05.2019 14:58

Возможно ли, что вы начнете использовать версию 7.0.1 Elastic?

user2264784 08.05.2019 15:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
4
1 055
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Клиент elasticsearch в вашем приложении подключается к кластеру, используя транспортный протокол. Этот подход устарел и уже удален в последних выпусках. Этот транспортный протокол не является HTTP, и ваш прокси-сервер шутки, вероятно, не может анализировать/издеваться над отправляемыми данными. Это причина, по которой localhost работает, а прокси jest не работает.

Чтобы ваше приложение было совместимо с будущими выпусками elasticsearch, вам следует рассмотреть возможность использования высокоуровневого клиента REST без потери каких-либо функций для весеннего приложения. И в качестве быстрого выигрыша вы снова сможете использовать jest, потому что клиент REST использует HTTP для связи с elasticsearch.

Пожалуйста, ознакомьтесь с подробностями о миграции клиента (я предположил, что версия elasticsearch основана на трассировке стека, дважды проверьте ее) https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/java-rest-high-level-migration.html

Спасибо за Ваш ответ. Есть еще некоторые сомнения. На данный момент я использую Spring Data ElasticSearch, config, ElasticSearchRepository, тогда, если я собираюсь использовать клиент высокого уровня Java Rest, то как я могу интегрировать клиент отдыха высокого уровня с Spring Data ElasticSearch.

nitin tyagi 10.05.2019 07:34

@ibeexit теперь я использую HighLevelRestApi и исключаю транспортный клиент, и все работает нормально. Спасибо за Ваш ответ.

nitin tyagi 12.05.2019 14:50

рад слышать. счастливого кодирования!

ibexit 13.05.2019 12:58

Другие вопросы по теме