知道了Dubbo是如何选择网卡的了,但是好像对我们没有太大帮助,我总不能限制网卡的网速去吧?
最好的办法还是,我是否可以设置?再看一遍源码是不是遗漏了什么 。看下是如何选择网卡的:
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 onefor (NetworkInterface networkInterface : validNetworkInterfaces) {// 是否为优选的网卡if (isPreferredNetworkInterface(networkInterface)) {result = networkInterface;break;}}if (result == null) { // If not found, try to get the first onefor (NetworkInterface networkInterface : validNetworkInterfaces) {Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();while (addresses.hasMoreElements()) {Optional<InetAddress> addressOp = toValidAddress(addresses.nextElement());if (addressOp.isPresent()) {try {if (addressOp.get().isReachable(100)) {return networkInterface;}} catch (IOException e) {// ignore}}}}}if (result == null) {result = first(validNetworkInterfaces);}return result;}复制代码这方法也分为几步,也是很好理解的:
- 查找所有合适的网卡
- 在查找的网卡里遍历一遍,看是否有优先设置的
- 如果没有,选择一个网速100毫秒响应的
- 如果还没有,则返回第一个网卡
dubbo.network.interface.ignored可以设置哪些网卡被忽略,如果忽略多个可以用逗号拼接 。例如dubbo.network.interface.ignored=eth0,eth1 。这个参数好像可以满足我们的需求 。
第二步,查找网卡是否有被我们优先设置的 。
isPreferredNetworkInterface方法我们看下:
public static boolean isPreferredNetworkInterface(NetworkInterface networkInterface) {// dubbo.network.interface.preferredString preferredNetworkInterface = System.getProperty(DUBBO_PREFERRED_NETWORK_INTERFACE);return Objects.equals(networkInterface.getDisplayName(), preferredNetworkInterface);}复制代码可以看到,我们可以通过DUBBO_PREFERRED_NETWORK_INTERFACE这个参数,也就dubbo.network.interface.preferred来指定网卡 。例如:dubbo.network.interface.preferred=eth0 。
看到这里,我们就明白了,至少我们可以通过排除网卡或者设置网卡来让Dubbo选择合适的ip去注册 。因为docker容器里,不一定有多少个确定的网卡,还是指定网卡比较保险 。
问题解决好了,知道如何让Dubbo来选择网卡了,我们只要找到各个容器里在同一网段的网卡就好了 。
于是,登录到各个docker容器里,查看ip信息 。对比了一下,发现eth1这个ip的网段都是10.10.x.x网段的 。
配置环境变量信息
dubbo.network.interface.preferred=eth1,重启服务,然后访问接口,果然通了 。
大功告成!
后记其实,还有其他办法来解决问题,比如:protocol配置host信息、设置 DUBBO_IP_TO_REGISTRY和DUBBO_IP_TO_BIND等 。这里就不展开说明了,有兴趣的小伙伴可以自己试一试 。
【记一次处理Dubbo多网卡注册IP错误问题】
推荐阅读
- 乐嘉|有一次,鲁豫问乐嘉:你跟金星现在还有来往吗?乐嘉当即发怒
- 汤姆索亚历险记思维导图(汤姆索亚思维导图简图)
- 异世界游记|中国古代竟真有直钩钓鱼,除此之外,还有什么神奇的钓鱼方法?
- 刮目相看|快速得到领导的信任!牢记4点,让领导刮目相看
- 明星|2022年被曝“桃色新闻”的10大明星,前车之鉴那么多,还不长记性
- 《末世女主重生记》末世来临,她将商场塞空间,带两娃吃香喝辣!
- 无韵之离骚是什么意思 无韵之离骚
- 王馥荔的儿子(王馥荔老公简介)
- 王国之心1(王国之心记忆之链)
- 完颜立童记(完颜立童记高清图片)
