当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch 5 Java客户端提供“nonodeAvailableException”

顾乐心
2023-03-14

我使用的是Elasticsearch 5.2和Spring Boot 1.5.1。我通过一个Spring应用程序中的Java客户端连接到它。当我在端口93009200上连接到它时,得到nonodeAvailableException:配置的节点都不可用。在我的Java客户机中,我将client.transport.sniff属性设置为true。通过端口9200上的cURL向它发送请求时,它工作正常。我在一个集群中有4个节点,我不能连接到其中任何一个。我的配置文件具有network分部中的所有默认值,但network.host除外,后者的值为eth0inet addr

我在用Gradle。我的依赖项是:

compile('org.springframework.boot:spring-boot-starter-web')
compile('org.elasticsearch:elasticsearch:5.2.0')
compile('org.elasticsearch.client:transport:5.2.0')
compile('org.apache.logging.log4j:log4j-api:2.7')
compile('org.apache.logging.log4j:log4j-core:2.7')

连接到Elasticsearch集群的代码:

@Bean
public TransportClient elasticClient() {
    org.elasticsearch.common.settings.Settings settings = Settings.builder()
        .put("client.transport.sniff", true)
        .put("cluster.name", "TestCluster")
            .build();
    TransportClient client = null;
    try {
        client = new org.elasticsearch.transport.client.PreBuiltTransportClient(settings)
            .addTransportAddress(new org.elasticsearch.common.transport.InetSocketTransportAddress(
                InetAddress.getByName("54.175.155.56"), 9200));
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return client;
}

启动ES时,我的ES日志如下:

[2017-02-15T10:37:40,664][INFO ][o.e.t.TransportService   ] [ip-10-0-29-2] publish_address {10.0.29.2:9300}, bound_addresses {10.0.29.2:9300}
[2017-02-15T10:37:40,669][INFO ][o.e.b.BootstrapChecks    ] [ip-10-0-29-2] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-02-15T10:37:43,856][INFO ][o.e.c.s.ClusterService   ] [ip-10-0-29-2] detected_master {kafka-stage}{sTIeF8gGTNam0oNW8dkbbA}{TTX6FIRtRp-gDemYY-22Sg}{10.0.20.71}{10.0.20.71:9300}, added {{kafka-stage-2}{jl3oLGgMQ1yxhdMMy65k_g}{ibV8BApjRByUOpDDncddyQ}{10.0.51.31}{10.0.51.31:9300},{ip-10-0-40-144}{t-_THs3wQbC_k9eivDo5eQ}{v-UYoYgXQ265QkdYhtiPYA}{10.0.40.144}{10.0.40.144:9300},{kafka-stage}{sTIeF8gGTNam0oNW8dkbbA}{TTX6FIRtRp-gDemYY-22Sg}{10.0.20.71}{10.0.20.71:9300},}, reason: zen-disco-receive(from master [master {kafka-stage}{sTIeF8gGTNam0oNW8dkbbA}{TTX6FIRtRp-gDemYY-22Sg}{10.0.20.71}{10.0.20.71:9300} committed version [98]])
[2017-02-15T10:37:44,009][INFO ][o.e.h.HttpServer         ] [ip-10-0-29-2] publish_address {10.0.29.2:9200}, bound_addresses {10.0.29.2:9200}
[2017-02-15T10:37:44,009][INFO ][o.e.n.Node               ] [ip-10-0-29-2] started

这些问题的答案并不能解决我的问题:

  1. Java ElasticSearch配置的节点均不可用
  2. ElasticSearch-NonodeAvailableException
  3. ElasticSearch NoNodeAvailableException问题

共有1个答案

陈季
2023-03-14

ElasticSearch.yml配置文件中,需要确保绑定到正确的主机,并具有以下设置:

network.host: 54.175.155.56

同样在Java代码中,由于使用的是传输客户端,所以需要使用端口9300(用于TCP通信),而不是9200(用于HTTP通信)

    client = new org.elasticsearch.transport.client.PreBuiltTransportClient(settings)
        .addTransportAddress(new org.elasticsearch.common.transport.InetSocketTransportAddress(
            InetAddress.getByName("54.175.155.56"), 9300));
                                                     ^
                                                     |
                                                change this
 类似资料:
  • 在某些情况下,您可能需要将一些自定义类型为您的客户提供程序实例。JAX-RS 类型不需要像他们一样将参数传入 API 方法来注入。注入到客户端提供者(过滤器,拦截器)只需要将供应者注册为一个类。如果提供者被注册成为一个实例,那么运行时将不会注入提供者。原因是,该提供程序实例可以注册为多个客户端配置。例如 一个 ClientRequestFilter实例可以注册两个Client。 为了解决一个自定义

  • 我在这里找一些社会融合专家来启发我这个困惑。我的Web服务器正在使用Spring安全来验证用户登录,注册。我最近在我的网络服务器上实现了Spring社交,一切都非常顺利。以fb为例,当用户从facebook登录时,Spring Social将构建outh url并将用户重定向到facebook。一旦用户在facebook认证,它将重定向他们回到我的网站。 我需要实现我的移动应用程序(html5 p

  • 我正在使用调用Android上的云函数,但如果需要超过10秒,则该函数返回error。当我在firebase(服务器端)上检查时,它显示功能完成(没有任何错误)。 她是我的职责, 下面是堆栈跟踪日志, 更新:Firebase控制台日志 是不是我错过了什么?我真的很感激任何帮助。

  • 我想使用远程过程调用(RPC)开发一个Qt5/C客户机-服务器应用程序。 想法:服务器监听多个客户端的传入连接。客户机提供了一组服务器可以调用的过程/服务,以便从客户机收集数据并将更改通知其他客户机。 这里有一个问题:到目前为止,我看到的RPC库似乎期望服务器提供客户端可能调用的服务。但我想做相反的事情。客户端应该提供服务器可能调用的服务。方向很重要,因为我想只在服务器端启用端口转发,而不是在客户

  • 我在我的项目中使用SQL服务器,我试图在两个时间戳之间检索表中的条目。表的架构如下所示: 我需要获取在特定时间戳和当前时间戳之后添加的条目。为此,我尝试了下面提到的查询: 当在SQL客户机上直接执行这个查询时,我得到了所有预期的结果。但是当我从Java JDBC客户端执行相同的查询时,< code>resultset包含的条目的ADDED_TIME等于parameter1。 下面是客户端的Java

  • 客户端弱提示 Tida.toast("Hello World!");