springdata整合elasticsearch7.x错误NoNodeAvailableException,health check failed,es与redis的netty启动冲突的解决方法
1. NoNodeAvailableException es小白 今天去用springboot data 去整合 elasticsearch的时候出现了NoNodeAvailableException。网上的说法是版本不匹配,我也遇到了这个问题。
- 首先去查看自己es 版本号 :
http://127.0.0.1:9200
我的es 是7.6.0
- 查看spring-data-elasticsearch jar包中的版本号
文章图片
发现底层的transport -netty4-client 的版本号是6.8.8 还有rest-high-level-client 发生了版本不匹配现象。出现错误。
- 在pom 文件的properties 定义es 的版本号 :
文章图片
- 刷新maven
文章图片
此时再启动项目 即可解决。
配置文件中添加 :elasticsearch.rest.uris
spring:
data:
elasticsearch:
cluster-name: docker-cluster
cluster-nodes: 127.0.0.1:9300
repositories:
enabled: true
# 异常处理
elasticsearch:
rest:
uris: 127.0.0.1:9200
3. netty启动冲突 如果项目里面同时使用到了redis 和 elasticsearch ,就会出现
nested exception is java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]1
主要的原因就是redis 也使用到了Netty,这影响在实例化传输客户端之前初始化处理器的数量。 实例化传输客户端时,我们尝试初始化处理器的数量。 由于在其他地方使用Netty,因此已经初始化并且Netty会对此进行防范,因此首次实例化会因看到的非法状态异常而失败。
【springdata整合elasticsearch7.x错误NoNodeAvailableException,health check failed,es与redis的netty启动冲突的解决方法】解决方法
在springboot 主启动类中添加 :
@PostConstruct
public void init() {
// 解决netty启动冲突问题
// see Netty4Utils.setAvailableProcessors()
System.setProperty("es.set.netty.runtime.available.processors", "false");
}