最近做一个项目引入了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. java 多线程系列基础篇(十一)之生产消费者问题

    1. 生产/消费者模型 生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下:(01) 生产者仅仅在仓储未满时候生产,仓满则停止生产 ...

  2. 10-26C#基础回顾、汇总(函数重点)

    第一部分==进制转换 重点记忆: 1.任意进制转十进制 按权展开法 p代表进制数,a/b/c...m分别代表进制数p从右往左第1位--第(n-1)位的数 公式:a*p0+b*p1+c*p2+..... ...

  3. 10-19C#基础--第四部分类型(2)重点

    类型: 一.数字:Math类型 1)Math.Ceiling() ( 表示进位.));//只要小数点后有值,就向前进一位,取上限. string s = Console.ReadLine(); dou ...

  4. SQLServer SDK

    https://www.cnblogs.com/Leo_wl/p/3451865.html 回到目录 SQLSERVER一些公用DLL的作用解释 如果你的SQLSERVER安装在C盘的话,下面的路径就 ...

  5. DAY4-函数进阶

    目录: 一.迭代器 二.生成器 三.面向过程编程 四.三元表达式.列表推导式.生成器表达式 五.第归与二分法 六.匿名函数 七.内置函数 练习 一.迭代器 一.迭代的概念 #迭代器即迭代的工具,那什么 ...

  6. Javascript面向对象(二):构造函数的继承

    这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个" ...

  7. Android 数据库 OrmLite Failed to open database

    04-01 16:49:32.720: E/SQLiteLog(1894): (14) cannot open file at line 30204 of [00bb9c9ce4]04-01 16:4 ...

  8. [hdu2255]奔小康赚大钱(二分图最优匹配、KM算法)

    题目大意:求二分图的最优匹配(首先数目最大, 其次权值最大). 解题关键:KM算法 复杂度:$O(n^3)$ #include<cstdio> #include<cstring> ...

  9. No bean class specified on bean definition 解决方案

    调试Spring项目出现No bean class specified on bean definition异常 但是控制台并没有给出其他相关信息了 这个时候可以在AbstractBeanDefini ...

  10. Spring JDBCTemplate配置使用

    一.开发环境 Windows 10 IntelliJ IDEA 2016.1 旗舰版 JDK1.8 二.项目和数据库结构 项目结构: 数据库(MySQL 5.5.39): /* Navicat MyS ...