解决因多网卡导致dubbo注册到ZK的IP错误问题,dubbox(当当,2.8.4)升级至dubbo(Apache,2.7.15)并集成dubbo-admin

1、特别说明

此次升级使用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、可能的报错以及解决方案

3.1、invalid constant type: 18

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、Address already in use

3.2.1、报错如下:

3.2.2、解决方案:

  1. 按照2.3中步骤进行修改即可,虽然qos端口冲突并不影响服务……
  2. 参考文档: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+即可

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值