点击登录,精彩内容等着你

Springboot + Dubbo3的一次实践,掌握maven关联组件的版本信息,排查因为版本问题导致的错误

全栈侠客

2023-05-29
springboot启动无报错,但是启动不完整(应该是半启动状态),连接zookeeper没有异常,zookeeper终端报:Received packet at server of unknown type 106

一、问题描述

项目中,升级了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 升级到该版本,出现问题


问题表现

  1. 项目启动监控
    在项目启动类中,本人添加了项目启动的时间计算,有利于查看项目启动的时间信息,代码片段如下:

    1. long begin = System.currentTimeMillis();
    2. ApplicationContext ctx = SpringApplication.run(VCampusMainApp.class, args);
    3. System.out.println("start time : " + (System.currentTimeMillis()-begin)/1000 + "s");

    结果问题出现的时候,一直没有执行第三行的:sysout.out输出内容。证明项目启动过程中出现问题,并没有完全启动,或者是因为某些原因,让线程暂时受阻

  2. zookeeper控制台
    一直输出:Received packet at server of unknown type 106 错误,大概意思是:收到不明类型的包请求。

  3. 项目请求与页面正常,唯独涉及到dubbo相关接口,出错。

二、问题排查

明显就是dubbo的问题引起的,问题是如何去排查问题到底出现在那里呢?可以从以下几个方面进行排查:

  • dubbo3的升级,是否有区别于dubbo2版本的一些其他关键性配置,而项目目前没有配置到的?
  • dubbo相关的与springboot结合的,启动类注解,配置文件中配置项,是否有错,或者遗漏?
  • 检查清楚,目前dubbo相关类,注解等是否引入正确?
  • dubbo升级了,是否有对zookeeper版本的依赖有要求?是否现有的zookeeper 3.5.6不合要求?

依据以上的顺序,一步一步进行问题排查,总会有收获的,不过还是有一定的方法手段,才能快速定位问题…


  1. 通过在dubbo的官网中,进行查询,并没有发现有什么新的配置参数,通过官方的对springboot的dubbo的示范代码中,也没有发现一些参数配置有问题。并且通过降低dubbo的版本到2.7.7之后,项目能正常启动的,所以第一种可能被排除。

  2. 通过对几个关键性的配置,进行检查,并没有发现注解,配置文件中配置项,发现错误或者遗漏。第二种可能被排除。

  3. 查看相关dubbo的接口类,并没有发现异常,controller中引入的接口,也是使用@DubboReference注解引入,也没有发生异常,第三种可能被排除。

  4. 看着zookeeper丑陋的命令行,越发这个家伙的嫌疑最大,好吧,托了一下柯南同款的眼镜,开始在这个家伙上下一下功夫…

    • 首先去dubbo官网查看,dubbo3有没有一些说明说到需要zookeeper的版本要求之类的。随便看了一下,没有呢,好家伙,是要逼我了…
    • 我自己查看去,通过maven的关联,是可以查看到关联的版本号的:
  1. <!-- Dubbo -->
  2. <properties>
  3. <dubbo.version>3.1.10</dubbo.version>
  4. </properties>
  5. <dependency>
  6. <groupId>org.apache.dubbo</groupId>
  7. <artifactId>dubbo-spring-boot-starter</artifactId>
  8. <version>${dubbo.version}</version>
  9. <exclusions>
  10. <exclusion>
  11. <groupId>com.alibaba</groupId>
  12. <artifactId>fastjson</artifactId>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.dubbo</groupId>
  18. <artifactId>dubbo-bom</artifactId>
  19. <version>${dubbo.version}</version>
  20. <type>pom</type>
  21. <scope>import</scope>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.apache.dubbo</groupId>
  25. <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
  26. <version>${dubbo.version}</version>
  27. <type>pom</type>
  28. </dependency>

以上是Dubbo官方提供的针对springboot的maven引入示范代码,我特意添加了排除fastjson的引入,因为工程中引入了fastjson2的,这里却是引入了fastjson1,有点失望,怎么自动引入了fastjson1呢?

在eclipse打开的pom.xml中,按住Ctrl件,点击

  1. <dependency>
  2. <groupId>org.apache.dubbo</groupId>
  3. <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
  4. <version>${dubbo.version}</version>
  5. <type>pom</type>
  6. </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
经过尝试,问题搞定了

关注我,精益编程 让你学编程快一点。

阅读 5779     最后编辑 2023-05-29 15:49
文章补充
评论(0) 发表新评论
  • ...暂无评论...

我是有底线的 评论与点赞5分钟更新一次
回复评论
取消关闭

请先登录