项目场景:
dubbo服务所在的机器存在多网卡的情况。
问题描述
dubbo服务在启动过程中,如果存在多网卡的情况,例如 : 连接了vpn,则在注册服务时,可能会注册上vpn的ip,导致内网的服务无法被访问。
原因分析:
通过查看dubbo源码,可以发现dubbo的服务向注册中心暴露的url,是如何拼接host和端口的。
private URL buildUrl(ProtocolConfig protocolConfig, Map<String, String> params) {
String name = protocolConfig.getName();
if (StringUtils.isEmpty(name)) {
name = "dubbo";
}
//获取host
String host = findConfiguredHosts(protocolConfig, this.provider, params);
//获取port
Integer port = findConfiguredPort(protocolConfig, this.provider, this.getExtensionLoader(Protocol.class), name, params);
URL url = new ServiceConfigURL(name, (String)null, (String)null, host, port, (String)this.getContextPath(protocolConfig).map((p) -> {
return p + "/" + this.path;
}).orElse(this.path), params);
if (this.getExtensionLoader