Spring Boot Elastic Search и не удается подключиться

Я следил за этим руководством на сайте Mkyong https://www.mkyong.com/spring-boot/spring-boot-spring-data-elasticsearch-example/

Он использует библиотеку spring-boot-starter-data-elasticsearch для подключения к elasticSearch.

Я использовал следующие данные, чтобы попытаться подключиться к экземпляру эластичного поиска на Amazon.

elasticsearch.host=<search address in amazon elastic search console>
elasticsearch.port=9200
elasticsearch.clustername=<accountId:clusterName>`

Однако я продолжаю получать следующие ошибки

 2017-05-16 18:37:24.308  INFO 7108 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'elasticsearchTemplate' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=esConfig; factoryMethodName=elasticsearchTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/mkyong/EsConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; factoryMethodName=elasticsearchTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchDataAutoConfiguration.class]]
2017-05-16 18:37:24.859  INFO 7108 --- [           main] org.elasticsearch.plugins                : [Rawhide Kid] modules [], plugins [], sites []
2017-05-16 18:37:46.911  INFO 7108 --- [           main] org.elasticsearch.client.transport       : [Rawhide Kid] failed to connect to node [{#transport#-1}{55.66.223.158}{55.66.223.158:9200}], removed from nodes list

org.elasticsearch.transport.ConnectTransportException: [][55.66.223.158:9200] connect_timeout[30s]
    at org.elasticsearch.transport.netty.NettyTransport.connectToChannelsLight(NettyTransport.java:967) ~[elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.transport.netty.NettyTransport.connectToNode(NettyTransport.java:933) ~[elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.transport.netty.NettyTransport.connectToNodeLight(NettyTransport.java:906) ~[elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.transport.TransportService.connectToNodeLight(TransportService.java:267) ~[elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler.doSample(TransportClientNodesService.java:390) ~[elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.client.transport.TransportClientNodesService$NodeSampler.sample(TransportClientNodesService.java:336) [elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.client.transport.TransportClientNodesService.addTransportAddresses(TransportClientNodesService.java:187) [elasticsearch-2.4.4.jar:2.4.4]
    at org.elasticsearch.client.transport.TransportClient.addTransportAddress(TransportClient.java:243) [elasticsearch-2.4.4.jar:2.4.4]
    at com.mkyong.EsConfig.client(EsConfig.java:45) [classes/:na]
    at com.mkyong.EsConfig$$EnhancerBySpringCGLIB$$7e0ccfee.CGLIB$client$0(<generated>) [classes/:na]
    at com.mkyong.EsConfig$$EnhancerBySpringCGLIB$$7e0ccfee$$FastClassBySpringCGLIB$$83a2b819.invoke(<generated>) [classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) [spring-core-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) [spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at com.mkyong.EsConfig$$EnhancerBySpringCGLIB$$7e0ccfee.client(<generated>) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instant

Есть идеи, что мне нужно сделать, чтобы подключиться к экземпляру эластичного поиска на Amazon?

Спасибо, Дэмиен.


person Damien Gallagher    schedule 16.05.2017    source источник
comment
можете ли вы вызвать конечную точку elasticsearch из локального curl -XGET 55.66.223.158:9200 из вашего локального или нет?   -  person prayagupd    schedule 16.05.2017
comment
Я могу подключиться к порту 80, но не к порту 9200 или порту 9300.   -  person Damien Gallagher    schedule 16.05.2017
comment
Возвращает ли порт 80 информацию об эластичном поиске или просто ответ http? Я имею в виду, каков ответ curl -XGET 55.66.223.158:80. Я просто хотел убедиться, что elasticsearch на вашем удаленном компьютере работает на порту 9200, а брандмауэр AWS открыт для этого порта.   -  person prayagupd    schedule 16.05.2017
comment
Это ответ curl на порту 80 — {имя: Mimir, имя_кластера: ‹имя моего кластера›, версия: {номер: 2.3.2, build_hash: 72aa8010df1a4fc849da359c9c58acba6c4d9518, build_timestamp: 2016-11-14T15:59:50Z, build_snapshot false, lucene_version: 5.5.0}, слоган: You Know, for Search}   -  person Damien Gallagher    schedule 16.05.2017
comment
поэтому он работает на порту 80, но вы подключаетесь к 9200. измените конфигурацию, elasticsearch.port=80. должно сработать   -  person prayagupd    schedule 16.05.2017
comment
это дает мне эту ошибку - java.io.StreamCorruptedException: неверный формат внутреннего транспортного сообщения, получено (48,54,54,50)   -  person Damien Gallagher    schedule 16.05.2017
comment
Есть несколько причин, почему StreamCorruptedException происходит. Можете ли вы проверить, что ваш java, работающий на сервере elasticsearch, и ваш локальный компьютер одинаковы? - discuss.elastic.co/t/   -  person prayagupd    schedule 16.05.2017
comment
Другая причина заключается в том, что порт 80 эквивалентен 9200, который является портом по умолчанию для http-связи для elasticsearch. Но раньше был порт 9300 для TCP-соединения из API, такого как Java. Я не уверен, какой порт Amazon использует для транспортировки TCP. Пожалуйста, проверьте конфигурацию AWS elasticsearch для этого — elasticsearch-users.115913.n3.nabble.com/   -  person prayagupd    schedule 16.05.2017
comment
Неважно, что это будет также порт 80 для TCP-связи, как упоминается в этом ответе. поэтому проверьте, что версии Java похожи на сервере и клиенте, НО также убедитесь, что имя вашего кластера правильное   -  person prayagupd    schedule 16.05.2017


Ответы (3)


AWS Elasticsearch не поддерживает соединения TCP, только соединения HTTP. Это объясняет, почему ваши команды CURL работают, но ваше java-соединение не работает.

TCP transport
The service supports HTTP on port 80, but does not support TCP transport.

http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/aes-supported-resources.html

https://forums.aws.amazon.com/thread.jspa?messageID=683536

person Brian Ecker    schedule 16.05.2017

AWS Elasticsearch работает только на порту 80 с использованием Rest API. Транспортный API по умолчанию от elasticsearch не работает с размещенным AWS elasticsearch.

Мне пришлось настроить клиент Jest, чтобы добавить дополнительные крючки для подписи каждого запрос.

Вы можете обратиться к этому сообщению на Stack Overflow для получения более подробной информации о том, как подписать HTTP-запрос.

person Yeshodhan Kulkarni    schedule 16.05.2017

Используйте HOST: IP-адрес размещенного AWS elasticsearch или путь размещенного AWS es и ПОРТ: 80

Ex:

10.100.1.1 или xyz.abc.com

person Aniruddh Rathore    schedule 09.10.2019