升级过程 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
建议升级步骤
- 依赖关系维护整理,理论上,xxx-service-api module 至多只有部分注入 lombok, hutool-all, guava 等工具性质的依赖,以及 entity 的依赖; 避免其它项目引用时产生的依赖冲突问题
- springboot 版本升级,为引入 springcloud alibaba 做准备,nacos 的使用,依据之前的经验来看,最少需要使用 1.4.2 版本; 如果想要获得更好的权限控制体系的话,最低需要 2.0.1
dubbo版本升级步骤(from 2.5.3 to 2.7.10)
1. 新增 maven 依赖
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- 注册中心按需选择,这里使用的是zookeeper, 其它请自行引入 -->
<!--
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
</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
其它问题记录
版本冲突问题
- 需排除
com.alibaba.dubbo
的依赖
<exclusions>
<exclusion>
<artifactId>dubbo</artifactId>
<groupId>com.alibaba</groupId>
</exclusion>
</exclusions>
- 日志建议使用 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"
解决方法:
<!-- <dubbo:application name="demo-provider"/>-->
<!-- <dubbo:provider filter="assetExceptionFilter"/>-->
<!-- <dubbo:registry id="xxx-service" address="${zk.url}" check="false"/>-->
<!-- <dubbo:protocol name="dubbo" dispatcher="all" port="-1" threadpool="cached" threads="1500"/>-->
dubbo:
application:
id: xxx-service
name: ${dubbo.application.id}
protocol:
name: dubbo
dispatcher: all
port: -1
threadpool: cached
threads: 1500
provider:
filter: assetExceptionFilter
registry:
id: demo
address: ${zk.url}
check: false
### 一个更友好的建议, 相同公共配置提取到配置中心,同时增加 spring.application.name 属性配置,
### dubbo.application.id/name 可以统一读取 spring.application.name
### 其次,建议废弃 xml 方式的配置,改用 application.yml 方式配置
参考文档
https://dubbo.apache.org/zh/docs/v2.7/user/versions/version-270/