一、问题描述
项目中,升级了dubbo的版本,由2.7.7升级到3.1.10版本,结果项目启动不成功,但是控制台并没有报错。
目前使用各个框架的版本如下:
Springboot 2.7.10
jdk 8
zookeeper 3.5.6
dubbo 2.7.7 该版本一切正常
dubbo 3.1.10 升级到该版本,出现问题
问题表现
项目启动监控
在项目启动类中,本人添加了项目启动的时间计算,有利于查看项目启动的时间信息,代码片段如下:long begin = System.currentTimeMillis();
ApplicationContext ctx = SpringApplication.run(VCampusMainApp.class, args);
System.out.println("start time : " + (System.currentTimeMillis()-begin)/1000 + "s");
结果问题出现的时候,一直没有执行第三行的:sysout.out输出内容。
证明项目启动过程中出现问题,并没有完全启动,或者是因为某些原因,让线程暂时受阻
zookeeper控制台
一直输出:Received packet at server of unknown type 106 错误,大概意思是:收到不明类型的包请求。项目请求与页面正常,唯独涉及到dubbo相关接口,出错。
二、问题排查
明显就是dubbo的问题引起的,问题是如何去排查问题到底出现在那里呢?可以从以下几个方面进行排查:
- dubbo3的升级,是否有区别于dubbo2版本的一些其他关键性配置,而项目目前没有配置到的?
- dubbo相关的与springboot结合的,启动类注解,配置文件中配置项,是否有错,或者遗漏?
- 检查清楚,目前dubbo相关类,注解等是否引入正确?
- dubbo升级了,是否有对zookeeper版本的依赖有要求?是否现有的zookeeper 3.5.6不合要求?
依据以上的顺序,一步一步进行问题排查,总会有收获的,不过还是有一定的方法手段,才能快速定位问题…
通过在dubbo的官网中,进行查询,并没有发现有什么新的配置参数,通过官方的对springboot的dubbo的示范代码中,也没有发现一些参数配置有问题。并且通过降低dubbo的版本到2.7.7之后,项目能正常启动的,所以第一种可能被排除。
通过对几个关键性的配置,进行检查,并没有发现注解,配置文件中配置项,发现错误或者遗漏。第二种可能被排除。
查看相关dubbo的接口类,并没有发现异常,controller中引入的接口,也是使用@DubboReference注解引入,也没有发生异常,第三种可能被排除。
看着zookeeper丑陋的命令行,越发这个家伙的嫌疑最大,好吧,托了一下柯南同款的眼镜,开始在这个家伙上下一下功夫…
- 首先去dubbo官网查看,dubbo3有没有一些说明说到需要zookeeper的版本要求之类的。随便看了一下,没有呢,好家伙,是要逼我了…
- 我自己查看去,通过maven的关联,是可以查看到关联的版本号的:
<!-- Dubbo -->
<properties>
<dubbo.version>3.1.10</dubbo.version>
</properties>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
以上是Dubbo官方提供的针对springboot的maven引入示范代码,我特意添加了排除fastjson的引入,因为工程中引入了fastjson2的,这里却是引入了fastjson1,有点失望,怎么自动引入了fastjson1呢?
在eclipse打开的pom.xml中,按住Ctrl件,点击
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
这个位置,能打开对应依赖的pom,该文件能查看关联组件与其版本好,结果有发现:
dubbo3.1.10该版本,关联的zookeeper的版本,是3.7.0,而本项目使用的zookeeper是3.5.6,我想我找到问题原因了...
三、问题解决
升级一下zookeeper的版本,进行验证,可以通过官方zookeeper的下载地址:
https://archive.apache.org/dist/zookeeper/
下载目前最新版:apache-zookeeper-3.8.1-bin.tar.gz
经过尝试,问题搞定了
关注我,精益编程 让你学编程快一点。