微信公众号:
【背景】
最近项目中集成Nacos客户端,上线时需要部署到客户服务器上时,出现了这个报错,根据网上资料,ping nacos服务端和telnet 端口,均无误。
【问题描述】
Server check fail, please check server x.x.x.x ,port 9848 is available , error ={}
同时springcloud日志中含有如下异常:
Error to process server push response: {"headers":{},"abilityTable":{"supportPersistentInstanceByGrpc":true},"module":"internal"}
【问题原因】
1、我们项目中使用的Nacos客户端是2.x之上的版本,Nacos在这个版本中新增了gRPC通信,默认通信端口是Nacos中配置的server-addr的端口号加1000的偏移量,所以我们的报错是检查9848端口是否开放,如下为官方解释:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-compatibility.html
2、检查nacos 服务端的版本,目前我们使用的是最新版本 Nacos2.3.0
3、检查springCloud项目使用的nacos-client.jar 版本,其nacos-client.jar版本是默认从alibaba springcloud 集成组件中继承过来的。
alibaba springcloud 内置组件对应关系官方文档地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
nacos-client maven仓库地址(可查看jar包和服务端的对应关系):
https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client
【解决方案】
1、检查nacos服务端与spingcloud服务器之间的网络,保障nacos服务端对外端口8848/9848/7848/9849 及 网络均可访问(telnet验证)。
2、替换springcloud中的nacos-client.jar包和nacos服务端的版本保持一致,即排除默认的jar包,引用与nacos-server对应版本的jar包
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- nacos配置中心来做配置管理 begin-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<!-- <nacos.client.version>2.3.0</nacos.client.version> -->
<version>${nacos.client.version}</version>
</dependency>
切记重新打包部署。
3、检查springcloud中的nacos连通配置在bootstrap.yaml中,并非在applicaiton.yaml中(nacos在服务启动前要提前注册至nacos中)