支持的Dubbo过程会有人反馈服务提供者IP获取不对 或是 出异常:
Dubbo实际使用的API是java.net.InetAddress.getLocalHost()来获取本机IP。
使用JDK版本是1.6。
排查一下这个API返回出错的原因,排查结果如下:
/etc/hosts中有配置主机名条目
如果/etc/hosts中有配置主机名条目,则返回主机名条目中配置的IP地址,不管这个IP地址是否是机器的实际IP地址。
API运行一下结果:
阿里线上用的是RedHat,/etc/hosts中都会配置主机名的条目,用的是正确的IP。所以线上没有获取IP不对的问题。
主机名条目配置的是不对的IP,API getLocalHost也会愉快的返回。如:
API运行一下结果:
在Ubuntu和RedHat上都会愉快的返回这个不对的IP。
/etc/hosts中没有配置主机名条目
如果/etc/hosts中没有配置主机名条目,则会走DNS解析。
我的开发机的机器名在DNS上查不到,API调用出错:
线上的机器名可以DNS查到,上面的调用可以返回正确的IP。
FEATURED TAGS
生活
blog
Java
shell
Unix/Linux
unix
Groovy
jms
mom
middleware
extension
log4j
philosophy
原则
最佳实践
Shell
generic
gnu
windows
cmd
tips
dubbo
Service
设计
class
date
i/o
api
design
服务
优劣
Linux
git
week
日期
星期
计算
月份
命令行
配置
Windows
Dubbo
约定
权限
Command Line
发布
java
cooma
release
微容器
github
microcontainer
扩展点
容器