升级过程 2.7.8, 2.7.9, 2.7.10,一路踩坑,直到2.7.10 方才成功

dubbo 版本选择 :https://www.anquanke.com/post/id/245429

springboot 版本 2.3.10.RELEASE
springcloud 版本 Hoxton.SR11
springcloud alibaba 版本 2.2.5.RELEASE

建议升级步骤

  1. 依赖关系维护整理,理论上,xxx-service-api module 至多只有部分注入 lombok, hutool-all, guava 等工具性质的依赖,以及 entity 的依赖; 避免其它项目引用时产生的依赖冲突问题
  2. springboot 版本升级,为引入 springcloud alibaba 做准备,nacos 的使用,依据之前的经验来看,最少需要使用 1.4.2 版本; 如果想要获得更好的权限控制体系的话,最低需要 2.0.1

dubbo版本升级步骤(from 2.5.3 to 2.7.10)

1. 新增 maven 依赖

  1. <dependency>
  2. <groupId>org.apache.dubbo</groupId>
  3. <artifactId>dubbo-spring-boot-starter</artifactId>
  4. </dependency>
  5. <!-- 注册中心按需选择,这里使用的是zookeeper, 其它请自行引入 -->
  6. <!--
  7. <dependency>
  8. <groupId>org.apache.dubbo</groupId>
  9. <artifactId>dubbo-registry-nacos</artifactId>
  10. </dependency>
  11. -->
  12. <dependency>
  13. <groupId>org.apache.dubbo</groupId>
  14. <artifactId>dubbo-registry-zookeeper</artifactId>
  15. </dependency>

2. 修改dubbo的xml配置文件中的schema地址

将所有[http://code.alibabatech.com/schema/dubbo](http://code.alibabatech.com/schema/dubbo) 替换为 [http://dubbo.apache.org/schema/dubbo](http://dubbo.apache.org/schema/dubbo)

3. 修改包名

com.alibaba.dubbo 修改为 org.apache.dubbo

其它问题记录

版本冲突问题

  1. 需排除 com.alibaba.dubbo 的依赖
  1. <exclusions>
  2. <exclusion>
  3. <artifactId>dubbo</artifactId>
  4. <groupId>com.alibaba</groupId>
  5. </exclusion>
  6. </exclusions>
  1. 日志建议使用 spring-boot-starter-log4j2, 不再额外维护日志的N多组件

序列化问题

升级版本可解决, 2.7.7/2.7.8 可能会遇到序列化问题, 升级2.7.9/2.7.10 可以解决

issue 列表:https://github.com/apache/dubbo/milestone/34?closed=1

dubbo 2.7.10 问题记录

Invalid name="org.apache.dubbo.config.ProtocolConfig#0"

解决方法:

  1. <!-- <dubbo:application name="demo-provider"/>-->
  2. <!-- <dubbo:provider filter="assetExceptionFilter"/>-->
  3. <!-- <dubbo:registry id="xxx-service" address="${zk.url}" check="false"/>-->
  4. <!-- <dubbo:protocol name="dubbo" dispatcher="all" port="-1" threadpool="cached" threads="1500"/>-->
  1. dubbo:
  2. application:
  3. id: xxx-service
  4. name: ${dubbo.application.id}
  5. protocol:
  6. name: dubbo
  7. dispatcher: all
  8. port: -1
  9. threadpool: cached
  10. threads: 1500
  11. provider:
  12. filter: assetExceptionFilter
  13. registry:
  14. id: demo
  15. address: ${zk.url}
  16. check: false
  17. ### 一个更友好的建议, 相同公共配置提取到配置中心,同时增加 spring.application.name 属性配置,
  18. ### dubbo.application.id/name 可以统一读取 spring.application.name
  19. ### 其次,建议废弃 xml 方式的配置,改用 application.yml 方式配置

参考文档

https://dubbo.apache.org/zh/docs/v2.7/user/versions/version-270/