Dubbo消费者无法连接到生产者提供的服务
来源:互联网 发布:中田英寿 知乎 编辑:程序博客网 时间:2024/04/27 18:27
原文链接:http://blog.csdn.net/xlgen157387/article/details/52702659
背景:
这篇文章的标题可以设置为如下几个,因为他都是同一个解决方法:
(1)Dubbo注册zookepper时为什么会自动使用内网IP?
(2)Dubbo消费者无法连接到生产者提供的服务
(3)。。。
场景还原
1、项目部署架构
最近在开发一个项目,使用到Dubbo服务,以下是项目部署的情况,
详细说明如下(IP地址不具有可连通性,为了具体情况假设,大家不要试了!):
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
服务器A与B是位于公网IP的服务器(阿里云服务器)。
2、所遇到的问题
1、生产者成功部署到服务器A;
2、生产者可以成功注册到Zookeeper中心且Zookeeper服务正常;
3、所有需要的端口都已经打开(通过防火墙进行设置);
4、生产者项目、消费者项目使用的Dubbo的IP地址均为公网IP,且均正确;
在上述的情况下,出现开发机C上的Dubbo消费者无法找到服务器A上运行的Dubbo生产者,并且出现错误:
- 1
- 2
- 3
- 1
- 2
- 3
可以看出服务名为:com.ufind.server.facade.JointModuleFacade:1.0.0;
注册中心:zookeeper://139.229.17.226:2181;
意思就是在这和注册中心中没有找到这个服务的提供者,但是在dubbo-admin中确实存在这个服务的:
值得注意的是,这个地方的IP地址是我服务器A的内网IP地址,于是又找了一个错误的地方如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
意思就是从:server /10.12.11.3:20880中获取服务的,很明显的这是一个内网IP地址,但是却出现在我的开发机C上,也就是说我的本地开发机C是无法找到公网IP服务器的内网IP地址的,所以无法获取Dubbo生产者提供的服务。
真相是否如此,做了一个实验,把生产者和消费者都部署到另一台阿里云服务器C上,如下:
事实证明,结果是正确的,在同一网络环境下,同样的配置是没有问题的,也就是说在统一环境下,内网是可以相互通信的。
因此问题的所在,归根于我的项目中Dubbo生产者的注册中心IP、Dubbo服务消费者注册中心的IP均设置的为公网IP,但是为什么经过注册中心这一程序,消费者查找生产者的IP地址变为内网IP地址了呢?
问题根源所在
Dubbo服务的消费者在向Zookeeper服务中心寻找服务的时候,Zookeeper将Dubbo服务生产者的内网地址给了消费者,所以才会出现:client(省略具体的服务全称) failed to connect to server /10.47.184.14:20880
这样的话,对于开发机C来说,这个内网是不具有可达性的,所以找不到服务的提供者。
找到了问题的原因,那么这个问题是由什么造成的呢?
这是由于在服务器hosts配置的文件中,将主机名指向了内网IP地址,查看我的服务器A和B的hosts配置文件如下:
服务器A的hosts文件为:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
服务器B的hosts文件为:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
可以在上边看出,主机名都指向了内网IP,因此需要将他们改回具体的公网IP地址,或者直接删除,就可以解决问题。
分别对应的改成如下所示:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
然后依次重新启动:Zookeeper服务–>重启Dubbo服务生产者–>重启Dubbo服务消费者,既可以成功运行。
可以看出上边的IP地址已经变为公网的IP地址了,然后在自己的开发机C上重新运行Dubbo消费者项目,也可以成功的运行,得到生产者提供的服务。
总结
如果你在确定你的所有配置是正确的,指定的Zookeeper注册中心IP地址是正确的,所有使用到的端口都已经通过防火墙的配置的话,遇到无法获取生产者提供的服务,或者注册失败等信息的话,不妨看一下是不是因为内网IP造成的。
因为,我的这个项目使用的是阿里云的云服务器,有两台,即是上文中的服务器A和服务器B,遇到这个问题之后发现阿里云默认的为我们将内网IP和主机名进行了关联,即是hosts文件的配置:
图片做了处理,应该可以看得懂!
但是,我看了同等配置的腾讯云服务器,就没有了这个事情,没有自动指定。
所以,大家以后再遇到这个问题的时候,首先可以看一下是不是已经踏进了这个坑!
- Dubbo消费者无法连接到生产者提供的服务
- Dubbo消费者无法连接到生产者提供的服务?内网IP?
- Dubbo消费者无法连接到生产者提供的服务?内网IP?
- dubbo 4 服务消费者到提供者过程
- 生产者或消费者跨机连接网络上的Sun Java System Message Queue服务
- maven项目搭建dubbo的消费者和生产者
- zookeeper发布到服务器dubbo无法连接的问题
- dubbo 服务消费者初始化
- SQLEXPRESS“无法连接到wmi提供程序”的解决办法
- “无法连接到WMI 提供程序”的解决办法
- 无法连接到 WMI提供程序的解决办法
- 解决“无法连接到WMI提供程序”
- “无法连接到WMI提供程序“解决方法
- 无法连接到 WMI 提供程序
- svn 无法连接主机, 无法加载或初始化请求的服务提供程序
- Dubbo之服务消费者Web应用war包的部署
- 构建dubbo服务消费者web应用的war包
- 生产者-消费者的问题
- golang 令牌桶限速器实现(ratelimit)
- MySql 查询实例
- 蓝桥杯 带分数
- Eclipse快捷键
- 性能测试方案设计的方法和思路
- Dubbo消费者无法连接到生产者提供的服务
- beecloud轻松实现支付
- Access学习要点1----组合框值列表原理
- IDEA的项目C标签前台取不到值,直接显示${}表达式的解决办法
- 3-RabbitMQ交换机- fanout
- POJ P2182 Lost Cows
- joracle job 定时执行 存储过程
- Map按Key或者Value排序
- 当你访问网站时,Session会立刻建立吗?