一、简述问题背景
同事在本地启动dubbo服务时,发现自己的注册到zk上的dubbo 地址为:
dubbo://192.168.20.100:20880/com.xxx.xxx...
而其实际的ip 地址是192.168.10.60,他换了好几次不同的版本号启动应用,发现始终不是正常的ip地址,于是,开始了这次排插过程~~,看解决方案可以直接到三。
二、查看源码
1.首先,我们看下同事自身配置的dubbo.xml,里面的 dubbo:provider和dubbo.protocol均无强制指定的URL,排除是自身dubbo配置文件的问题
2.我们开始看dubbo 里面是怎么初始化提供者的url,由于dubbo 中存在ServiceBean实现了InitializingBean接口,因此在Spring示例化这个bean后会调用里面的 afterPropertiesSet 方法:
public void afterPropertiesSet() throws Exception {
//前面省略部分代码,这些代码是在判断配置项缺失时的处理
......
// 处理完后暴露provider
if (!isDelay()) {
export();
}
}
3.接着我们到export方法里面看,它做了什么,它在 ServiceConfig 中:
public synchronized void export() {
// 这个代码段很好理解,就是 赋值 export和delay
if (provider != null) {
if (export == null) {
export = provider.getExport();
}
if (delay ==