承载dubbo服务的机器多IP时,需要指定dubbo服务需要绑定到的IP(dubbo.protocol.host),确保登记到注册中心的提供者或者消费者的IP之间可以互相ping通
此IP与具体环境有关,上生产环境时,需要进行增量配置
=========================
绑定IP,DUBBO 怎么做的
通常绑定本机ip地址 一般如下
- InetSocketAddress address = new InetSocketAddress(port);
- Channel serverChannel = bootstrap.bind(address);
InetSocketAddress默认使用的是什么ip呢?看看内部代码就明白了:
- public InetSocketAddress(int port) {
- this(InetAddress.anyLocalAddress(), port);
- }
InetAddress.anyLocalAddress()一般就是0.0.0.0/0.0.0.0,如果我们有两块网卡,一块内网,一块外网,那么都能访问这个socket,这通常是不安全的。那么通过InetAddress.getLocalHost().getHostAddress()呢?
结果悲剧了,使用上面的代码取回的是127.0.0.1。
好了,看看dubbo是怎么解决,dubbo获取本机ip地址的方法封装在com.alibaba.dubbo.common.utils.NetUtils类里面。
- import java.net.InetAddress;
- import java.net.NetworkInterface;
- import java.util.Enumeration;
- import java.util.regex.Pattern;
- import org.slf4j.Logger;
- import org.slf4j.Logger