Spring Boot配置的节点都不可用问题

7

大家好,我正在开发一个使用Elastic Search的Spring Boot项目。我已经在本地安装了Elastic Search,并且在Elastic Search中安装了Head插件。我的Elastic Search已经正确设置并显示绿色标志。

我的项目中的application-dev.yml文件如下:

server:
    port: 8080

liquibase:
    context: dev

spring:
    profiles:
        active: dev
    datasource:
        dataSourceClassName: org.h2.jdbcx.JdbcDataSource
        url: jdbc:h2:mem:jhipster;DB_CLOSE_DELAY=-1
        databaseName:
        serverName:
        username:
        password:

    jpa:
        database-platform: com.aquevix.demo.domain.util.FixedH2Dialect
        database: H2
        openInView: false
        show_sql: true
        generate-ddl: false
        hibernate:
            ddl-auto: none
            naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
        properties:
            hibernate.cache.use_second_level_cache: true
            hibernate.cache.use_query_cache: false
            hibernate.generate_statistics: true
            hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
    data:
        elasticsearch:
            cluster-name: elasticsearch
            cluster-nodes: localhost:9200
    messages:
        cache-seconds: 1
    thymeleaf:
        mode: XHTML
        cache: false
    activemq:
        broker-url: tcp://localhost:61616



metrics:
    jmx.enabled: true
    spark:
        enabled: false
        host: localhost
        port: 9999
    graphite:
        enabled: false
        host: localhost
        port: 2003
        prefix: TestApollo

cache:
    timeToLiveSeconds: 3600
    ehcache:
        maxBytesLocalHeap: 16M

我电脑上正在运行Elasticsearch服务,但当我试图通过Elasticsearch repository将实体先保存到MySQL,然后再保存到Elasticsearch时,保存到Elasticsearch时会出现错误:

Hibernate: insert into EMPLOYEE (id, rollno) values (null, ?)
[ERROR] com.aquevix.demo.aop.logging.LoggingAspect - Exception in com.aquevix.demo.web.rest.EmployeeResource.create() with cause = null
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:298) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:214) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:105) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:94) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:331) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:313) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65) ~[elasticsearch-1.3.2.jar:na]
        at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:431) ~[spring-data-elasticsearch-1.1.3.RELEASE.jar:na]
        at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:138) ~[spring-data-elasticsearch-1.1.3.RELEASE.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_51]

我也尝试使用9300端口代替9200端口,但仍然无法正常工作。我已经尝试了所有方法,但都没有找到解决方案,请帮忙!


1
我在这里遇到了同样的问题,也是使用 Elasticsearch 2.x 版本,你应该在你的问题中指明它。 - Tony
4个回答

3

我发现ES 2.0无法正常工作,所以我重新安装了ES 1.7.3,现在它可以在我的情况下正常工作。这里有完整的详细信息!


1
你链接中的这部分内容对我很有帮助: 注意:如果你想要在Java或Spring Boot中使用elasticsearch,不要使用9200端口,因为9200端口用于HTTP协议,而9300端口仅用于TCP协议。 - jcroll

2

我和你一样遇到了同样的问题,也在使用Jhipster。如前所述,降级你的elasticsearch实例是一种可能的解决方案,但如果你不想降级它,下面的方法适用于我:

  • 将spring boot更新到最新版本(>1.4.0.RC1)
  • 手动配置ElasticsearchTemplate,而不是使用自动配置。

如果需要更多信息,请查看此帖子: http://ignaciosuay.com/how-to-connect-spring-boot-to-elasticsearch-2-x-x/


1
我遇到了这个错误,原因是我使用了错误的集群名称。
解决此错误的步骤:
  1. 确保Spring Data Elasticsearch与您打算使用的Elasticsearch版本兼容。该项目的README中有一个表格,对应Spring Data Elasticsearch版本和Elasticsearch版本:
    https://github.com/spring-projects/spring-data-elasticsearch#quick-start

    在我的情况下,我正在使用Spring Data Elasticsearch 3.0.7。根据表格,我需要使用Elasticsearch 5.5.0,但我发现Spring Data Elasticsearch 3.0.7似乎也与Elasticsearch 5.6.x兼容。

  2. 确保spring.data.elasticsearch.cluster-nodes属性指定了Elasticsearch集群用于使用本机Elasticsearch传输协议进行通信的端口。

    默认情况下,Elasticsearch监听两个端口,9200和9300。端口9200用于使用RESTful API进行通信。端口9300用于使用传输协议进行通信:
    https://www.elastic.co/guide/en/elasticsearch/guide/current/_talking_to_elasticsearch.html

    Spring Data Elasticsearch使用的Java客户端希望使用传输协议进行通信(默认为9300)。

  3. 确保spring.data.elasticsearch.cluster-name属性指定了正确的集群名称。

    如果您没有明确设置此属性,则默认值为"elasticsearch"。

    您可以使用RESTful API查找Elasticsearch集群名称:
    curl -XGET 'http://localhost:9200/?pretty'

    此命令将打印类似于以下内容:

    {
      "name" : "XXXXXXX",
      "cluster_name" : "some_cluster_name",
      "cluster_uuid" : "XXXXXXXXXXXXXXXXXXXXXX",
      "version" : {
        "number" : "5.6.10",
        "build_hash" : "b727a60",
        "build_date" : "2018-06-06T15:48:34.860Z",
        "build_snapshot" : false,
        "lucene_version" : "6.6.1"
      },
      "tagline" : "You Know, for Search"
    }
    

    请确保将spring.data.elasticsearch.cluster-name属性的值设置为与"cluster_name"显示的相同字符串。


0

您似乎正在使用JHipster(如果我可以这样说,这是一个非常棒的工具集),它使用

org.springframework.boot:spring-boot-starter-data-elasticsearch: -> 1.3.3.RELEASE

这仅适用于ElasticSearch 2.0以下版本,因此只需安装ElasticSearch 1.7.3并运行您的代码即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接