问题描述

应用中使用了dubbo,在部署到服务器上时,如果服务提供方和消费方不在一个网段,发现消费方无法连接Provider,发现使用的Provider机器的内网IP地址。

有2种解决办法,下面依次说明。

解决办法

1.修改hosts文件增加主机名与公网IP的映射

dubbo在服务注册时默认使用的内网ip,如果需要在公网环境访问,需要让dubbo以公网ip注册服务。

1.通过hostname得到主机名;
2.修改hosts文件,将公网ip映射到主机名;

1
2
3
4
[root@iZj6cjcq027ejq3outzx5eZ logs]# vi /etc/hosts
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
172.31.190.219   iZj6cjcq027ejq3outzx5eZ #将IP改成公网ip

改完后重启服务即可。

2.在dubbo服务的提供方配置host为公网IP。

![/img/dubbo-provider.png]

如何服务同时能被内网和公网访问?

在上面的解决方法中第2点,可以指定服务提供方的host,将该host指定为域名即可。这样内网的机器可以解析该域名为局域网地址 而外网机器可以解析域名为公网地址。