今天准备搞搞 dubbo3 的项目示例,顺便将最近升级的 nacos2.0也集成进去,遇到了一个坑,小记一下
问题:Client not connected,current status:STARTING
简言之,就是 nacos 连不上。
历程 1
首先怀疑了我的 nacos 是不是挂了,一访问,没挂,难道是服务器内部将某些nacos 内部的进程停了?重启 nacos,再次访问,问题依旧!
历程 2
使用没有升级 nacos 和 dubbo 的项目测试连接了一下nacos,顺利注册进去了,看来不是 nacos 服务的问题。
历程 3
既然升级了 nacos,说不定是版本的问题呢,然后小小的 Google 了一波,都说是版本的问题,说要降低版本才行,嗯哼??我本就是要升级版本的呀,你让我降低版本,不要!🙅🏻♀️
历程 4
难道要我看看 nacos2.x 的源码是怎么怎么写的吗??不想看,继续搜索一波吧,皇天不负有心人啊,找到了这样一篇文章:http://user.tnblog.net/aojiancc/article/details/7869
其中提到 nacos 的端口问题,想来都是 8848 呀,其实不然,如下:
其实很容易理解,nacos2.x中,另外启动了 9848,9849 的端口用来进行通信,所以在注册服务的时候,会去访问 nacos 上的这俩端口,好巧不巧,我得 nacos 是部署在云服务器上的,没有配置安全防火墙策略(端口开放策略),好的问题找到了,配置一下试试看。
历程 5
配置好之后,再次启动我的服务,终于不是Client not connected,current status:STARTING
这个错误了,变成了一个没有找到某个类的问题:java.lang.NoClassDefFoundError: com/google/common/collect/Maps
,应该是 nacos 中使用了 google 的依赖,然后我又没有引入这个依赖导致的,好吧,加上这个guava 的依赖试试看:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.1-jre</version>
</dependency>
再次启动,就没有问题了,至于缺少 guava 依赖的问题,我尝试将nacos 的版本降到了 2.0.3,这个版本不需要引入 guava 的依赖都可以,但是高的版本又需要,emmmmm,可真不让人省心啊…
总结
总之,算是解决了问题
- nacos 升级到 2.x之后,需要将服务器上的端口策略配置一下,打开 9848,9849 的端口
- 有些 nacos2.x 的版本,没有 guava 的依赖,需要自己引入