1. 异常的出现
在使用TransportClient连接Elasticsearch时出现了NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}…… 这种异常,通过搜索其他人分享的解决办法,例如
new InetSocketTransportAddress(InetAddress.getByName("???.???.???.???"), 9300);
⑴ 修改端口号为TCP内部传输端口 9300
Settings settings = Settings.builder().put("cluster.name", "???").build();
TransportClient transportClient = new PreBuiltTransportClient(settings);
⑵ 设置集群名称
但是,尝试了这些方法仍然无法解决问题。最终我将Elasticsearch改为前台启动(之前一直是后台启动服务的),通过查看服务的日志,得出了解决的办法
2. 服务日志
[2017-12-30T00:57:00,859][WARN ][o.e.t.n.Netty4Transport ] [master] exception caught on transport layer [[id: 0x????, L:/???.???.???.???:9300 - R:/???.???.???.???:???]], closing connection
java.lang.IllegalStateException: Received message from unsupported version: [5.5.2] minimal compatible version is: [5.6.0]
可以看到日志很清楚的描述了出错的原因,就是因为使用了低版本的transport,最小的兼容版本须为5.6.0
3. 解决办法
修改pom依赖为5.6.0版本即可
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.0</version>
</dependency>
4. 注意事项
我使用的Elasticsearch是elasticsearch-6.0.0版本的,所以可能并不适用于你们的情况