dubbo注册zookeeper服务错乱
问题描述:2台内网的服务器上分别跑了A与B 2个dubbo 工程,有天中午A服务器突然访问不到B服务器,排查网络问题,地址端口都是通的,重启dubbo工程也无济于事。
后续排查发现B工程在启动的时候注册到zookeeper的地址居然是一个169.254. . 的地址,这个问题应该是ip变更导致注册的服务请求不到。
IP地址169.254. . 实际上是自动私有IP地址。在Windows 2000以前的系统中,如果计算机无法获取IP地址,则自动配置成“IP地址:0.0.0.0”、“子网掩码:0.0.0.0”的形式,导致其不能与其它计算机进行通信。而对于Windows 2000以后的操作系统则在无法获取IP地址时自动配置成“IP地址:169.254. . ”、“子网掩码:255.255.0.0”的形式,这样可以使所有获取不到IP地址的计算机之间能够通信。
在dubbo配置文件中配置本机正确的IP地址
在服务提供者 spring-provider.xml
配置文件中配置
<dubbo:protocol id="DUBBOInnerService" name="dubbo" port="${ylzpay.check.service.dubbo.port}" /> <dubbo:provider protocol="DUBBOInnerService" host="${host}"/>
官方文档解释也是建议这个参数在多网卡情况下使用 ,如果当前ip无法正确获取的时候,可以先配置该参数解决这个问题。
host-自动查找本机IP -服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,-建议不要配置,让Dubbo自动获取本机IP
参考文档:
IP地址为169.254. .解决dubbo注册zookepper服务IP乱入问题