处理org.elasticsearch.client.transport.NoNodeAvailableException

时间:2019-05-07 12:33:16

标签: spring-boot elasticsearch spring-data-elasticsearch

嗨,在我的SpringBoot项目中,我已经使用JPA配置了弹性搜索。我正在使用ElasticsearchRepository。现在,当我使用本地主机进行配置时,一切正常,但是当我输入IP地址时,我将面临异常-

  

org.elasticsearch.client.transport.NoNodeAvailableException:无   配置的节点可用:   [{#transport#-1} {lDnuVli1Rriy-9j1pdozZA} {27.101.12.99} {27.101.12.99:9300}]     在   org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:366)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:408)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54)   〜[elasticsearch-5.6.11.jar:5.6.11]在   org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:571)   〜[spring-data-elasticsearch-3.0.10.RELEASE.jar:3.0.10.RELEASE]在   org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:156)   〜[spring-data-elasticsearch-3.0.10.RELEASE.jar:3.0.10.RELEASE]在   sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)   〜[na:1.8.0_151]在   sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)   〜[na:1.8.0_151]在   sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)   〜[na:1.8.0_151],位于java.lang.reflect.Method.invoke(未知源)   〜[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:       笑话:         代理:           主持人:27.101.12.99           端口:9300

我进行了很多搜索,但对我而言没有任何帮助。因此,请检查并获得帮助。

1 个答案:

答案 0 :(得分:0)

应用程序中的elasticsearch客户端正在使用传输协议来加入集群。在最近的发行版中不赞成使用这种方法,并且已经将其删除。 这表示传输协议不是HTTP,并且您的笑话代理可能无法分析/模拟发送的数据。这就是localhost可以运行但jest代理失败的原因。

为了使您的应用程序与Elasticsearch的未来版本兼容,您应该考虑使用高级REST客户端,而不会失去spring应用程序的任何功能。很快,您将能够再次使用笑话,因为REST客户端正在使用HTTP与elasticsearch进行通信。

请查看此内容以获取有关客户端迁移的详细信息(我假设基于stacktrace的elasticsearch版本,请对其进行两次确认)https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/java-rest-high-level-migration.html