此次升级使用dubbo版本为2.7.15,并且此次升级为平滑升级,新/老包之间可互相调用。
2、详细升级步骤
2.1、pom.xml文件修改
去除原groupId为com.alibaba的相关dubbox依赖,添加以下依赖
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.15</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>2.7.15</version> <type>pom</type> </dependency> |
2.2、dubbo.xml配置文件修改,替换原来dubbo相关标签,改成如下标签(标红位置)
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd "> |
2.3、dubbo.xml配置文件修改,dubbo:application标签中添加以下以下内容(标红位置)
<dubbo:application name="${dubbox.application}" owner="programmer" organization="dubbox"> <!-- 关闭qos,默认为true --> <dubbo:parameter key="qos.enable" value="false"/> <!-- 关闭foreign,默认false,开启会存在安全风险 --> <dubbo:parameter key="qos.accept.foreign.ip" value="false"/> <!-- qos使用端口,默认为22222,如果qos.enable=true,则须修改此端口,否则如果是一台机器上部署多个dubbo项目,会报22222端口冲突 --> <!-- <dubbo:parameter key="qos.port" value="222222"/> --> </dubbo:application> |
2.4、dubbo.xml配置文件修改,dubbo:registry标签下面添加以下内容(标红位置)
<!-- zookeeper注册中心 --> <dubbo:registry address="${dubbox.registry.address}"/> <!-- dubbo admin元数据配置,地址为zk地址 --> <dubbo:metadata-report address="${dubbox.registry.address}"/> |
注意:这里写的是配置项的key值,注意自己的key是否相同,不要写错了
其实就是把 dubbo:registry 这一行复制一下,把 dubbo:registry 改成dubbo:metadata-report即可
2.5、代码修改
原代码 | 替换后代码 |
com.alibaba.dubbo.rpc.protocol.rest.support.ContentType | org.apache.dubbo.rpc.protocol.rest.support.ContentType |
com.alibaba.dubbo.container.Main | org.apache.dubbo.container.Main |
@com.alibaba.dubbo.config.annotation.Service | @org.apache.dubbo.config.annotation.DubboService |
3.1.1、报错如下:
3.1.2、解决方案:
排除项目中javassist版本为3.12.1.GA版本的包,使用dubbo依赖中自带的3.23.1-GA版本的包即可。3.12.1.GA版本的groupId为javassist,而3.23.1-GA版本的groupId为org.javassist。
3.2.1、报错如下:
3.2.2、解决方案:
- 按照2.3中步骤进行修改即可,虽然qos端口冲突并不影响服务……
- 参考文档:https://dubbo.apache.org/docs/v2.7/user/references/qos/#m-docsv27userreferencesqos
3.3、dubbo-admin中报错:无元数据信息,请升级至Dubbo2.7及以上版本,或者查看application.properties中关于config center的配置
3.3.1、报错如下:
3.3.2、解决方案:
1、按照2.4中步骤进行修改即可
2、参考文档:https://blog.csdn.net/qq_42393720/article/details/122275884
3.4、 多网卡、虚拟网卡等导致注册到ZK的ip地址错误
3.4.1、报错如下
实际ip地址为:10.0.X.X,但是dubbo获取到的ip地址为虚拟网卡的:192.168.122.1,导致消费者无法获取到正确的提供者,从而导致错误
3.4.2、解决方案
启动脚本增加启动参数即可
-DDUBBO_IP_TO_BIND=服务器实际ip
例如:java -jar -DDUBBO_IP_TO_BIND=1.2.3.4 demo.jar
源码位置:org.apache.dubbo.config.ServiceConfig#findConfigedHosts
docker参考资料:https://github.com/apache/dubbo-samples/tree/master/dubbo-samples-docker
4、注意事项
1、其他jar包冲突自行解决,附录为部分jar版本
jar包 | 当前使用版本 | 当前最新版本 | 备注 |
spring全家桶 | 5.3.15 | 5.3.15 | |
mybatis | 3.5.6 | 3.5.9 | |
mybatis-spring | 2.0.4 | 2.0.7 | |
dubbo | 2.7.15 | 3.0.5 | |
dubbo-dependencies-zookeeper | 2.7.15 | 3.0.5 | |
tomcat-embed-logging-juli | 8.5.2 | 9.0.0.M6 | |
tomcat-embed-core | 8.5.63 | 10.1.0-M10 | |
curator-framework | 4.2.0 | 5.2.0 | |
curator-recipes | 4.2.0 | 5.2.0 | |
jackson-databind | 2.13.1 | 2.13.1 | |
jackson-annotations | 2.13.1 | 2.13.1 | |
jackson-core | 2.13.1 | 2.13.1 | |
resteasy-jaxrs | 3.0.26.Final | 3.15.3.Final | |
resteasy-client | 3.0.26.Final | 6.0.0.Final | |
resteasy-netty | 3.0.26.Final | 3.15.3.Final | |
resteasy-jdk-http | 3.0.26.Final | 6.0.0.Final | |
resteasy-jackson2-provider | 3.0.26.Final | 6.0.0.Final | |
resteasy-jaxb-provider | 3.0.26.Final | 6.0.0.Final | |
jdk | 1.8 | 1.8+即可 |