版本
spring-cloud-alibaba:2021.1
项目构建工具:gradle
nacos-server:2.0.3
1、问题
昨天早上上班来了之后,运营的同事着急的过来说生产环境登不上了,我赶紧打开日志看了之后,就发现了这样的报错
问了运维他们说他们大晚上的也没改服务器的配置,于是就开启了漫长的debug之路
2、分析思路
在网上看了一大堆的解决方案之后,最后发现了两个比较合适的解决方案
1、https://github.com/alibaba/nacos/issues/5788
2、https://segmentfault.com/a/1190000040083941
其中方案一在和运维的同事讨论之后,认为我们自己的服务器环境不适合那种解决方案,所以就注重参考了方案二,下面来具体说一下方案二
-----------------------------------------------------华丽的分割线------------------------------------------------------------------
方案二中的这段话引起了我的注意
仔细查看了我的代码之后发现,虽然我引入的是spring-cloud-alibaba的2021.1版本,但是在spring-cloud-starter-alibaba-nacos-config和spring-cloud-starter-alibaba-nacos-discovery中nacos-client的版本还是1.4.1
也就是说虽然大的版本升级了,但是里面nacos-client的小版本并未升级。
3、解决方案
找到了这个问题之后,我们就可以在grade(或者maven)中手动排除一下nacos-client,重新引入一下nacos-client的最新版本
compile ('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {
exclude group:'com.alibaba.nacos', module:'nacos-client'
}
compile ('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {
exclude group:'com.alibaba.nacos', module:'nacos-client'
}
compile ('com.alibaba.nacos:nacos-client:2.0.3')
改了之后的依赖关系是这样的
重新上线部署之后,截止目前还没发现别的问题
4、问题总结
-
虽然是生产环境登不上了,但是我在仔细排查之后发现,其实服务本身并未宕机,直接调用该服务上的接口还是可以调的通的,只是该服务被nacos从服务列表中剔除了,出现该问题的原因应该是:报错之后打断了服务和nacos之间的心跳连接,nacos连接不上服务之后,就剔除了该服务,所以在feign调用的时候就报错了,但是不知道为什么服务恢复之后没有自动重连。至于为什么会好好的出现这个异常,还需要再继续研究一下。
-
Spring Cloud Alibaba和Spring Cloud和Nacos的版本对应关系:
因为我们公司项目的Spring Cloud版本之前升级到了2020.0.1,所以我的Spring Cloud Alibaba的版本只可以选择2021.1,那么我的Nacos版本也就只可以选择1.4.1了,But我当前的Nacos版本却是最新的2.0.3,不过目前还没有发现不可逆的错误。
笔者在此谨慎的告诉大家:版本升级的时候,一定要看清楚各个版本之间的对应关系,避免因为版本不对应的原因导致一些莫名其妙的bug -
出现这个问题之后,我们在生产环境加上了Nacos的Prometheus监控平台,具体的搭建流程大家可以参考Nacos的官方文档自行操作
参考链接:
- https://github.com/alibaba/nacos/issues/5788
- https://segmentfault.com/a/1190000040083941
转载请注明:Nacos踩坑记录之The IPv4 address(“nacos.xxxx.local“) is incorrect | 胖虎的工具箱-编程导航