springdata整合elasticsearch7.x错误NoNodeAvailableException,health check failed,es与redis的netty启动冲突的解决方法

1. NoNodeAvailableException es小白 今天去用springboot data 去整合 elasticsearch的时候出现了NoNodeAvailableException。网上的说法是版本不匹配,我也遇到了这个问题。

  1. 首先去查看自己es 版本号 :
http://127.0.0.1:9200

我的es 是7.6.0
  1. 查看spring-data-elasticsearch jar包中的版本号
    springdata整合elasticsearch7.x错误NoNodeAvailableException,health check failed,es与redis的netty启动冲突的解决方法
    文章图片

    发现底层的transport -netty4-client 的版本号是6.8.8 还有rest-high-level-client 发生了版本不匹配现象。出现错误。
解决 :
  • 在pom 文件的properties 定义es 的版本号 :
    springdata整合elasticsearch7.x错误NoNodeAvailableException,health check failed,es与redis的netty启动冲突的解决方法
    文章图片
  • 刷新maven springdata整合elasticsearch7.x错误NoNodeAvailableException,health check failed,es与redis的netty启动冲突的解决方法
    文章图片

    此时再启动项目 即可解决。
2. Elasticsearch health check failed 这个错误是在spring boot 去检查es的健康状态,用的是9200端口
配置文件中添加 :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"); }

    推荐阅读