最近做一个项目引入了dubbo+zookepper的分布式服务治理框架。在应用的发布的时候出现一个怪问题。zookepper服务是起在开发服务器192.168.23.180上。本机起应用服务提供者注册到192.168.23.180上的dubbo服务可以注册成功,用dubbo-admin看也是本机的IP:10.1.24.20。本机起的客户端程序也可以正常调用。但是服务提供者发布到192.168.23.180服务器上去就不行了。发布到服务器上注册的服务地址就变成了124.232.132.94:20883,这个地址消费者根本就找不到,所以老是报连接超时。按道理来说应该是192.168.23.180是服务提供者的地址才对。开始以为是代码里写了一个124.232.132.94这样的地址,搜了一遍没有找到。搜了一遍服务器的配置也没有这样一个地址。这个地址不知道是从哪里来的。应为服务提供者和zookepper在一台机器上,将服务提供者的注册地址改成127.0.0.1,发现还是一样的注册上去后就变成了124.232.132.94。于是怀疑是不是服务器上做了地址转发什么的。
上网找了一些资料发现原来是由于服务器上配了DNS的问题。
经过测试解决办法有以下几个:
1、去掉服务器上的DNS配置
找到服务器上的/etc/resolv.conf 将DNS配置去掉或配置成8.8.8.8或配成192.168.23.180这样这台服务器的DNS不可用。
参考配置如下
#nameserver 222.246.129.80
#nameserver 59.51.78.210
#nameserver 8.8.8.8
nameserver 192.168.23.180
#search localdomain
服务启动的时候会报一个"未知的名称或服务"的错误,但是不要紧,服务可以正常启动。也可以正常注册到zookepper,注册的地址也是真实的服务器地址。客户端可以正常访问。
 
2、在工程duboo注册服务配置文件里指定IP
把管理控制台中dubbo/webapps/ROOT/WEB-INF/dubbo.properties文件中加入dubbo.protocol.host=192.168.23.180,然后在Dubbo服务的dubbo配置文件<dubbo:protocol name="dubbo" port="20883"  />中加入 host="192.168.23.180",在Dubbo消费者端加入<dubbo:protocol host="192.168.0.123" />的配置。然后重启Dubbo管理员控制台、停止消费者端,停止服务提供端,启动服务提供端,再启动消费者端。
参考配置如下:
服务提供者provider.xml
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" host="192.168.23.180" port="20883" />
消费者consumer.xml
<dubbo:protocol host="192.168.23.180" />
配置完了后在dubbo-admin控制台可以看到服务提供者注册到zookepper上的dobbo服务已经是正常的192.168.23.180。消费者显示的还是consumer://124.232.132.94/***** 但不影响调用。
 
3、在服务器上/etc/hosts,上配置主机名和注册服务的IP。如:192.168.23.180 host2
没有配置之前ping 主机名host2 返回的是124.232.132.94
ping host2
PING host2 (124.232.132.94) 56(84) bytes of data.
64 bytes from 124.232.132.94: icmp_seq=1 ttl=55 time=5.67 ms
在/etc/hosts里配置IP和主机名192.168.23.180 host2 后ping主机名host2返回 192.168.23.180
ping host2
PING host2 (192.168.23.180) 56(84) bytes of data.
64 bytes from host2 (192.168.23.180): icmp_seq=1 ttl=64 time=0.024 ms
配置完后,服务注册IP地址正常,消费者可以正常访问。
 
以上三种方式都可以解决问题,但是第3种方式更加直接方便,更好。
 
转自:https://blog.csdn.net/fullbug/article/details/52739580

解决dubbo注册zookepper服务IP乱入问题的三种方式的更多相关文章

  1. Dubbo注册Zookepper服务的虚拟IP

    使用dubbo在zookepper上注册服务,使用dubbo的服务器IP为192.168.70.105 而在zookepper上显示服务提供者为 dubbo://202.102.110.203:808 ...

  2. spring入门 依赖入注的三种方式(1)

    第一种:构造器参数注入 第二种:setter方法属性注入(setter方法的规范-JavaBean规范) 第三种:接口注入 Bean 属性的注入:对一个对象的属性的赋值 1.构造器参数注入: publ ...

  3. dubbo服务运行的三种方式

    dubbo服务运行,也就是让生产服务的进程一直启动.如果生产者进程挂掉,也就不存在生产者,消费者不能进行消费. Dubbo服务运行的三种方式如下:1.使用Servlet容器运行(Tomcat.Jett ...

  4. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

  5. 三种方式解决你的js加载乱码

    第一种方式——编码统一 我们以前觉得出现乱码的原因是因为编码不统一,就是因为我们设置编码统一之后,就解决了问题,所以,让html和js的编码统一,是最简单的一个乱码解决方式,原因是什么,是因为,如果你 ...

  6. springboot与dubbo整合入门(三种方式)

    Springboot与Dubbo整合三种方式详解 整合环境: jdk:8.0 dubbo:2.6.2 springboot:2.1.5 项目结构: 1.搭建项目环境: (1)创建父项目与三个子项目,创 ...

  7. Hadoop生态圈-注册并加载协处理器(coprocessor)的三种方式

    Hadoop生态圈-注册并加载协处理器(coprocessor)的三种方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 到目前为止,大家已经掌握了如何使用过滤器来减少服务器端通过 ...

  8. angularjs 自定义服务的三种方式

    angularjs 中可通过三种($provider,$factory,$service)方式自定义服务,以下是不同的实现形式: // 定义module , module中注入$providevar ...

  9. 注册Jdbc驱动程序的三种方式

    注册Jdbc驱动程序的三种方式 1. Class.forName("com.mysql.jdbc.Driver"); 2. DriverManager.registerDriver ...

随机推荐

  1. node install error

    错误:Unexpected end of JSON input while parsing near.... 解决办法: npm cache clean --force

  2. C语言学习笔记--#error 、 #line 和 #pragma 的使用

    1. #error 的用法 (1)#error 是一种预编译器指示字,用于生成一个编译错误消息 (2)用法:#error message //注意:message 不需要用双引号包围 (3)#erro ...

  3. 3-在EasyNetQ上使用SSL连接(黄亮翻译)

    EasyNetQ可以通过SSL进行连接.这篇指南的作者Gordon Coulter最初为回应一个提问写的. 首先,你必须仔细依据https://www.rabbitmq.com/ssl.html文章中 ...

  4. python+requests+excel 接口测试

    1.EXCEL文件接口保存方式,如图. 2.然后就是读取EXCEL文件中的数据方法,如下: import xlrd class readExcel(object): def __init__(self ...

  5. nodejs的POST请求

    http://blog.csdn.net/puncha/article/details/9015317 Nodejs 发送HTTP POST请求实例 2013-06-03 17:55 71745人阅读 ...

  6. iOS 地图(添加大头针)

    首先在工程中导入MapKit.framework库文件 #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <U ...

  7. noi.ac day1t3 Sort

    传送门 分析 快排的原理是以任意一个数为标准,然后把所有小于它的数换到它的左边,所有大于它的数换到它的右边.我们就使用快排的思路,分治整个区间.对于每个区间以排好序的这个数列的中间位置的值为标准,然后 ...

  8. Android调试之Logcat

    转贴  http://www.cnblogs.com/adison/p/4264284.html 在Android开发过程中,总免不了要调试,无论是Debug,还是Android自带的Logcat,抑 ...

  9. Flask框架 之 功能详解

    浏览目录 配置文件 路由系统 视图 请求相关 响应 模板渲染 session 闪现 中间件 蓝图(blueprint) 特殊装饰器 配置文件 知识点 给你一个路径 “settings.Foo”,可以找 ...

  10. Entity Framework Tutorial Basics(13):Database First

    Database First development with Entity Framework: We have seen this approach in Create Entity Data M ...