当前位置: 首页 > news >正文

NacosException: Client not connected, current status:STARTING异常解决

异常描述

最近新部署了一套Nacos环境,然后SpringCloud项目启动一直报错,先贴一下原始的异常堆栈信息:

com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTINGat com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) ~[nacos-client-2.2.0.jar:na]at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) ~[nacos-client-2.2.0.jar:na]at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) ~[nacos-client-2.2.0.jar:na]at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) ~[nacos-client-2.2.0.jar:na]at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) ~[nacos-client-2.2.0.jar:na]at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) ~[nacos-client-2.2.0.jar:na]at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) ~[nacos-client-2.2.0.jar:na]at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) ~[spring-cloud-starter-alibaba-nacos-discovery-2021.0.6.1.jar:2021.0.6.1]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) [spring-cloud-commons-3.1.8.jar:3.1.8]at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) [spring-cloud-starter-alibaba-nacos-discovery-2021.0.6.1.jar:2021.0.6.1]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) [spring-cloud-commons-3.1.8.jar:3.1.8]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) [spring-cloud-commons-3.1.8.jar:3.1.8]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) [spring-cloud-commons-3.1.8.jar:3.1.8]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) [spring-cloud-commons-3.1.8.jar:3.1.8]at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:430) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) [spring-context-5.3.39.jar:5.3.39]at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57) [spring-boot-2.7.18.jar:2.7.18]at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:40) [spring-boot-2.7.18.jar:2.7.18]at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:183) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:58) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:365) [spring-context-5.3.39.jar:5.3.39]at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_411]at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:160) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:128) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:949) [spring-context-5.3.39.jar:5.3.39]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:594) [spring-context-5.3.39.jar:5.3.39]at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) ~[spring-boot-2.7.18.jar:2.7.18]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.7.18.jar:2.7.18]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) ~[spring-boot-2.7.18.jar:2.7.18]at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.18.jar:2.7.18]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.7.18.jar:2.7.18]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) ~[spring-boot-2.7.18.jar:2.7.18]at com.ims.gateway.GatewayServerApplication.main(GatewayServerApplication.java:13) ~[classes/:na]2024-10-24 12:11:14.905 |  WARN 56080 | main [TID: N/A] onfigReactiveWebServerApplicationContext | Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is java.lang.reflect.UndeclaredThrowableException
2024-10-24 12:11:17.330 |  INFO 56080 | main [TID: N/A] ConditionEvaluationReportLoggingListener | 

官方的解决方案:

专家官方解答 :com.alibaba.nacos.api.exception.nacosexception: clien | Nacos 官网

遇到com.alibaba.nacos.api.exception.NacosException: client not connect, current status:STARTING的问题,可以按照以下步骤分析和解决:

  1. 检查Nacos服务器地址配置:首先确认应用程序中配置的Nacos服务器地址(serverAddr)和端口是否正确,确保它们与实际运行的Nacos服务器地址匹配。如果使用了endpoint和endpointPort,请同样检查这些配置项。

  2. 版本兼容性检查:根据错误提示,此问题可能是由于客户端版本与服务端版本不兼容导致。请确认当前使用的Nacos客户端版本是否为2.0以上,而Nacos服务端版本是否为1.X。如果是版本不匹配的情况,请将Nacos服务端升级到2.X或更高版本以兼容客户端。

  3. 网络连通性测试:在出现错误的客户端节点上,执行网络诊断命令来检测到Nacos服务器的连通性:

    Terminal window

    ping ${nacos_host}

    telnet ${nacos_host} 8848

    确保能够成功ping通Nacos服务器地址,并且telnet能够连接到8848端口(默认配置)。如果存在网络问题,请与网络管理员协作解决。

  4. 日志检查:查看客户端日志(通常位于${user.home}/logs/nacos/目录下,具体路径可能因语言和版本不同而异),寻找更详细的错误信息或警告,这有助于进一步定位问题。注意,如果使用的是Spring Cloud,可能存在日志配置被覆盖的情况,需要适当调整以确保能查看到Nacos相关的日志。

  5. 环境变量与JVM参数检查:确认没有环境变量或JVM参数错误地指定了Nacos服务器地址,导致连接到了错误的地址。

如果经过上述步骤仍然未能解决问题,建议查看Nacos服务端的日志和系统监控,检查是否有服务端故障、高负载或配置不当等情况。同时,考虑是否有安全组规则、防火墙设置或其他网络策略限制了客户端到Nacos服务器的连接。

异常分析神器:DEBUG

网上找了一圈,跟官方的解答差不多,主要就是配置不对、客户端与服务端版本不匹配或者环境变量设置不对啥的。都尝试过,没用。最后没办法,现成得便宜捡不着,只能拿起重拾神器DEBUG,看看什么原因。

先看异常堆栈信息中的主要类和方法:

RpcClient和NamingGrpcClientProxy。

说起来也尴尬,要是对Nacos原理稍微有过深入了解,可能看见NamingGrpcClientProxy就大概猜到了问题所在。我这还是DEBUG才发现,就是客户端通过GRPC向Nacos服务端发起连接和请求,结果连接不上。

一般情况我们配置在项目中的地址都是IP+8848端口,所以通常我们也首先考虑的是IP通不通,8848端口通过通。这也跟官方的解答差不多。不过当你反复确认,结果两者没问题。

看看源码:

发起连接请求的不是用的8848而是9848。在项目部署的电脑上试试9848,发现真不通。

1、检查nacos部署服务器的9848端口是否被占用。(正常情况应该是nacos的进程占用,如果不是那就纠正)

2、检查部署nacos服务器的防火墙,看看9848端口有没有对外开放。

两步的操作命令这里就不贴了,网上很多。我的问题就是9848端口被防火墙拦住了。打开即可。

解决方案总结:

1、仔细看堆栈信息。

2、根据堆栈信息找异常的类、方法、行代码。

3、有空多看看Nacos原理,O(∩_∩)O

4、补充说明:

Nacos默认需要放开以下四个端口号:

  1. 8848:这是Nacos服务的主端口,用于客户端、控制台以及OpenAPI的HTTP通信。
  2. 9848:客户端gRPC请求服务端的端口,客户端通过此端口向Nacos服务端发起连接和请求。
  3. 9849:服务端gRPC请求服务端的端口,主要用于服务间的同步等操作。
  4. 7848:Jraft请求服务端的端口,用于处理服务端之间的Raft相关请求。

这些端口是基于Nacos服务端的主端口(默认8848)并通过固定的偏移量计算得出。通常情况下,只需公开主端口(8848)和服务端gRPC端口(9848)即可满足大多数场景下的网络配置需求,尤其是在使用VIP或负载均衡器的情况下。

关于Nacos端口的配置和指定,可以参考Nacos官方文档提供的详细信息:

  • Nacos部署文档
  • Nacos兼容性与升级指南

此外,对于客户端想要自定义gRPC端口偏移量的情况,可以通过设置JVM参数-D nacos.server.grpc.port.offset来实现,但需要注意确保服务端通过VIP/SLB正确映射相应的端口以避免访问问题。

关于Nacos版本的选择,推荐使用最新的2.X稳定版本,具体版本信息可从以下链接获取:

  • Nacos官网下载页面
  • GitHub Release页面

请根据实际部署环境和需求,参照上述信息进行端口配置与版本选择。


http://www.mrgr.cn/news/57696.html

相关文章:

  • 【Java数据结构】---哈希表
  • ThingsBoard规则链节点:Delete Attributes节点详解
  • css-(-webkit-、-moz-、-o-)前缀主要用于CSS和某些HTML属性,确保跨浏览器的兼容性和支持特定的CSS功能
  • 学习threejs,使用THREE.PointCloudMaterial(新版本:THREE.PointsMaterial)样式化粒子
  • 知识图谱的概念、特点及应用领域(详解)
  • 一文理解什么是环境质量标准
  • 在线制作拼团活动步骤是什么
  • java线程池大小与CPU关系
  • Unity插件-Intense TPS 讲解
  • 【Kubernetes实战】Kubernetes集群搭建(虚拟机环境,一主两从)
  • Pandas 文件读取与保存指南:高效处理 CSV、Excel 等多种格式数据
  • 【算法设计与分析】-回溯法的回忆-学习【期末复习篇章】
  • 绘画相关,MIDI
  • js中for...in 和 for...of 区别
  • java生成可执行文件
  • Java中的反射是什么?如何使用反射API?
  • 回归模型的增量学习的经典文章和方法
  • Docker原理|实战
  • globalAlpha:深入解析Canvas中的全局透明度
  • package,json 文件中依赖包的说明
  • 项目管理必备Git使用及关键指令(总体结构 + 必要步骤)教你如何协同开发
  • 微信小程序的日期区间选择组件的封装和使用
  • 如何使用IP代理优化亚马逊平台的操作体验
  • Get-WmiObject 命令使用
  • 为什么要进行母线槽测温?应用场景有哪些
  • Leetcode4:寻找两个正数数组中的中位数