dubbo升级导致无法使用,获取错误的本地ip

主要原因是dubbo升级后,注册到zk的ip地址发生了变化,导致调用方无法调用。

版本描述:2.7.8升级到2.7.22
在这里插入图片描述
可以看到获取register的方法发生了变化,导致获取到的本地IP可能产生了变化。

/**
     * Get the suitable {@link NetworkInterface}
     *
     * @return If no {@link NetworkInterface} is available , return <code>null</code>
     * @since 2.7.6
     */
    public static NetworkInterface findNetworkInterface() {

        List<NetworkInterface> validNetworkInterfaces = emptyList();
        try {
            validNetworkInterfaces = getValidNetworkInterfaces();
        } catch (Throwable e) {
            logger.warn(e);
        }

        NetworkInterface result = null;

        // Try to find the preferred one
        for (NetworkInterface networkInterface : validNetworkInterfaces) {
            if (isPreferredNetworkInterface(networkInterface)) {
                result = networkInterface;
                break;
            }
        }

#进入isPreferredNetworkInterface方法中来,使用到了一个系统属性DUBBO_PREFERRED_NETWORK_INTERFACE。
    public static boolean isPreferredNetworkInterface(NetworkInterface networkInterface) {
        String preferredNetworkInterface = System.getProperty(DUBBO_PREFERRED_NETWORK_INTERFACE);
        return Objects.equals(networkInterface.getDisplayName(), preferredNetworkInterface);
    }

dubbo在代码中提供了,两个可以处理registerIP的属性,“dubbo.network.interface.preferred”、“dubbo.network.interface.ignored”


#服务启动命令中增加参数  就能设置预期的网卡ip了
-Ddubbo.network.interface.preferred=ethXXX

"ensXXX"是网卡的displayName显示名称,显示名称默认是网卡的name,dubbo取的是displayName显示名称,如果未手动设置过网卡显示名称。
直接在linux上使用ip addr或者ipconfig即可获得网卡名称。一般是ethX,例如:eth1  eth2

还有一种解决方案是,如果是xml,可以在dubbo:protocol或者dubbo:provider 进行设置host属性。

 #
 <dubbo:protocol host="主机名称或者主机ip" />
 <dubbo:provider host="主机名称或者主机ip" />
 
 那么注册到zk的dubbo服务地址的ip就会变成
 dubbo://主机名称或者主机ip/com.aa.bb
 如果你写的主机名称是bai123,那么url="dubbo://bai123/com.aa.bb"
 如果你写的主机名称是"158.54.48.1",那么url="dubbo://158.54.48.1/com.aa.bb"
 Register dubbo service com.aaa.bbb.api.XXXService url dubbo://2.5.1.9:22221/com.aa.bb
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值