栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Dubbo网卡注册

Dubbo网卡注册

Dubbo网卡注册

服务发布时,需要将自身的IP地址上报到注册中心,供服务消费者去发现.

获取ip地址逻辑
获取网卡逻辑
    ServiceConfig#findConfigedHosts()方法
    获取DUBBO_IP_TO_BIND配置
        getValueFromConfig()方法:
        从env,property里获取配置
    若有配置,则校验是否是非法本地地址,若是则抛异常
        isInvalidLocalHost()
        是localhost 或 "0.0.0.0" 或 127开头的本地地址
    若没有配置,再获取host配置,校验若配置了非法地址抛异常
    上面没找到,再获取localhost地址
    再尝试获取注册中心host+port,看看能不能连上,并校验该地址
    最后再尝试调用getLocalHost()获取ip
        getLocalHost()方法:
        从LOCAL_ADDRESS缓存中获取
        获取ip地址ngetLocalAddress0()
            NetUtils#getLocalAddress0()
            尝试获取 hostname 对应的 IP 地址 n InetAddress.getLocalHost()
            判断是否是有效的IP地址
                toValidAddress()方法
                1.依次校验IP地址是否符合IPv6或IPv4规范
                1.1.检验IPv6地址
                    isValidV6Address()方法
                    1.判断`java.net.preferIPv6Addresses` 参数,n默认false,表示是否使用Ipv6 地址作为理想的注册 IP.n所以一般ipv6地址会直接跳过
                    2.通过 isReachable 判断网卡的连通性.n 例如一些网卡可能是 VPN/ 虚拟网卡的地址,如果没有配置路由表,往往无法连通,可以将之过滤.
                1.2.校验IPv4地址
                    isValidV4Address()
                    1.本地环回地址校验n isLoopbackAddress()
                    2.Ipv4 格式的正则校验,非 ANYHOST 校验,非 LOCALHOST校验.
            若上述未获取到地址,轮询网卡n 例如 hosts 未指定 hostname 的映射或者 hostname,n 配置成了 127.0.0.1 之类的地址便会导致获取到空的网卡地址
                轮询网卡n NetworkInterface.getNetworkInterfaces()
                若是本地环回地址 或 是虚拟网卡 或是 未启用的网卡,则continue
                校验ip地址合法性
                校验ip地址连通性
                若校验通过则返回该网卡ip
        缓存ip地址
参考

研究网卡地址注册时的一点思考

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602508.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号