最近做一个项目引入了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. queue队列模块

    import Queue myqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的 ...

  2. sys模块 进度条百分比

    用于提供对Python解释器相关的操作: sys.argv           命令行参数List,第一个元素是程序本身路径 sys.exit(n)        退出程序,正常退出时exit(0) ...

  3. maven安装第三方jar包到本地仓库

    添加项目依赖的时候,有些jar下载不下来,只有手动下载或安装到本地仓库了 首先下载所需要的jar,放到指定的文件夹 然后执行如下命令: mvn install:install-file -Dfile= ...

  4. winform combobox绑定数据

    mboBox下拉菜单控件,在数据库内的ComboBox应用的表进行修改时,如果是用的普通方法,显示数据一个方法,添加数据一个方法 这样会导致程序后期维护难度增加,在这里使用数据绑定来让ComboBox ...

  5. js 控制标记样式

    做一个变色的标签 鼠标移入变为灰色,移除变回原来的颜色,点击变成黑色,再点击变回,如果变成黑色不受移入移除影响. <body> <div class="bt1" ...

  6. R: 常用操作:

    ################################################### #清除所有变量: rm(list=ls()) #查看变量类型 getwd() setwd() i ...

  7. can基础知识介绍

    1.什么是can 2.can的特点 2.物理层特征 我们使用ISO11898标准,物理层特征如图所示 3.帧的种类介绍 实际上有一些帧是有硬件来实现的. 4.数据帧介绍 5.总线仲裁 6.位时序(用于 ...

  8. patch请求--501错误

    通过命令 tail -f /var/log/wildfly/wrapper.log -n 1000 查看控制台: 并没有报红. 未显示具体哪行代码有错误. debug运行patch请求,根本没有进入p ...

  9. 按位操作符(Bitwise operators)

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...

  10. CodeForces 670D2 Magic Powder - 2 (二分)

    题意:今天我们要来造房子.造这个房子需要n种原料,每造一个房子需要第i种原料ai个.现在你有第i种原料bi个.此外,你还有一种特殊的原料k个, 每个特殊原料可以当作任意一个其它原料使用.那么问题来了, ...