问题
同样的dubbo应用,同事启动只要10秒不到,我启动要2分钟,遂不服。
万能的stackoverflow告诉我,我需要设置hosts。
配置对应的hosts :(1)
127.0.0.1 localhost huanghuandeMacBook-Pro.local
::1 localhost huanghuandeMacBook-Pro.local
配置完成host发现启动从2分钟优化到了6秒!但是会有错误日志!作为强迫症的我岂能忍?!
错误日志内容:
开始调试:
1. 先`telent 127.0.0.1 20880`本地dubbo, ok是好的;
2. ll 看一下本地的dubbo provider接口列表;
3. 选中一个,invoke xxx.xx.xx.xxxProvider.test(),ok也是好的。
以上说明我的dubbo接口成功。
1. 进入本地nacos看一下dubbo是否注册上去,ok是好的。
捋一捋,dubbo接口是好的,dubbo注册成功,但是为什么启动会报错。
把改过的hosts改回去:(2)
127.0.0.1 localhost ::1 localhost
改回hosts,启动虽然慢了点,但是不报错。
使用debug大法:
- 将hosts改成 (1) 从上面错误日志那行源码点进去打断点,发现dubbo绑定的地址是127.0.0.1。
- 将hosts改成 (2) 再启动,dubbo绑定的地址改成了我的内网ip192.168.5.143。
很明显因为我配置了主机名,造成dubbo绑定的ip从内网ip192.168.5.143变成了主机ip127.0.0.1;所以这是为什么呢。其实官方已经在这里给了解释。
按照官方给的解释:
Dubbo选取本地地址的逻辑大致分成了两步; 先去 /etc/hosts 文件中找 hostname 对应的 IP 地址,找到则返回;找不到则转到去 轮询网卡,寻找合适的 IP 地址,找到则返回;找不到返回 null,如果返回 null,则注册 127.0.0.1 这个本地回环地址
所以我的问题就是没有找到合适的ip地址而去注册了127.0.0.1这个本地地址。
于是将我的hosts改成:
192.168.5.143 localhost huanghuandeMacBook-Pro.local
::1 localhost huanghuandeMacBook-Pro.local
或者:
在启动应用的时候加上启动参数: -DDUBBO_IP_TO_BIND=192.168.5.143
问题解决。