dubbo学习总结-(2)dubbo+zookeeper注册中心

上一篇文章讲了如何快速的体验dubbo,里面的服务注册中心采用的multicast,官方推荐的是采用zookeeper,这也是目前运用最多的方式,本文就介绍如何采用zookeeper来替代multicast。


安装zookeeper

直接去官网下载最新的发布版本,然后解压即可,在linux下可以采用命令行下载:

 
 
  1. wget http://mirror.olnevhost.net/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
  2. tar xzvf zookeeper-3.4.10.tar.gz

修改配置文件,直接复制conf目录下的配置样例即可:

 
 
  1. cp conf/zoo_sample.cfg conf/zoo.cfg

有了配置文件就可以直接运行了,运行有两种方式:

 
 
  1. # 后台运行,日志在安装目录下的zookeeper.out文件里可以查看
  2. ./bin/zkServer.sh start
  3. # 前台运行,可以在终端看到日志
  4. ./bin/zkServer.sh start-foreground

更多的指令的用法如下:

 
 
  1. Usage: ./bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

duboo没有对zookeeper做任何的修改,所以zookeeper正常运行后就不用管了,其他的事都交给duboo即可。(正式环境当然不会这么随意,后面的文章会专门来讲解在正式环境下该如何搭建)


增加zookeeper客户端依赖

zookeeper支持zkclient和Curator,两者的配置大同小异,依赖上,如果使用zkclient,则只需要增加一下依赖即可。

 
 
  1. <dependency>
  2.    <groupId>com.github.sgroschupf</groupId>
  3.    <artifactId>zkclient</artifactId>
  4.    <version>0.1</version>
  5. </dependency>

目前Curator是一个比zkclient更优秀的zookeeper客户端,后文也将采用Curator来描述。

在dubbo-demo-parent的pom增加依赖:

 
 
  1. <dependency>
  2.    <groupId>com.netflix.curator</groupId>
  3.    <artifactId>curator-framework</artifactId>
  4.    <version>1.1.10</version>
  5. </dependency>
  6. <dependency>
  7.    <groupId>org.apache.zookeeper</groupId>
  8.    <artifactId>zookeeper</artifactId>
  9.    <version>3.4.10</version>
  10. </dependency>

同理在dubbo-demo-provider和dubbo-demo-consumer的pom中增加依赖:

 
 
  1. <dependency>
  2.    <groupId>com.netflix.curator</groupId>
  3.    <artifactId>curator-framework</artifactId>
  4. </dependency>
  5. <dependency>
  6.    <groupId>org.apache.zookeeper</groupId>
  7.    <artifactId>zookeeper</artifactId>
  8. </dependency>

替换服务提供者的注册中心

修改dubbo-demo-provider工程中的配置文件provider.xml:

 
 
  1. <!-- 使用multicast广播注册中心暴露服务地址 -->
  2. <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
  3. <!-- 使用zookeeper注册中心暴露服务地址 -->  
  4. <dubbo:registry address="zookeeper://127.0.0.1:2181" subscribe="false" client="curator"></dubbo:registry>

替换服务提供者的注册中心

修改dubbo-demo-consumer工程中的配置文件consumer.xml:

 
 
  1. <!-- 使用multicast广播注册中心暴露发现服务地址 -->
  2. <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
  3. <!-- 使用zookeeper注册中心暴露服务地址 -->  
  4. <dubbo:registry address="zookeeper://127.0.0.1:2181" register="false" client="curator"></dubbo:registry>

 dubbo:registry的属性说明:

  • register是否向此注册中心注册服务,如果设为false,将只订阅,不注册。

  • check注册中心不存在时,是否报错。当设置为false时,记录失败注册和订阅请求,后台定时重试

  • subscribe是否向此注册中心订阅服务,如果设为false,将只注册,不订阅。

  • timeout注册中心请求超时时间(毫秒)。

  • address可以Zookeeper集群配置,地址可以多个以逗号隔开等。

  • id用来区分多个注册中心,service可以通过id指定要连接的注册中心

  • group,用来设置zookeeper的跟节点,缺省为dubbo

  • protocol显示的指定协议(本位是将协议写在了地址前面)

  • <dubbo:registry username="admin" password="1234" />设置zookeeper登录信息

dubbo:service

  • interface服务接口的路径

  • ref引用对应的实现类的Bean的ID

  • registry向指定注册中心注册,在多个注册中心时使用,值为<dubbo:registry>的id属性,多个注册中心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A

  • register 默认true ,该协议的服务是否注册到注册中心。

  • group:service和reference上也可以配置group,这个用于区分同一个接口的不同实现,只有在reference上指定与service相同的group才会被发现


到此就把multicast的注册中心替换为了zookeeper。如果要运行provider和consumer都必须要先启动zookeeper,并且每次运行都能在zookeeper的日志文件或者终端中看到对应的日志信息。


扩展知识

配置zookeeper,有多种写法:

 
 
  1. <dubbo:registry address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181" />
  2. <dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />

同一个zookeeper还可以创建多个注册中心

 
 
  1. <dubbo:registry id="chinaRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="china" />
  2. <dubbo:registry id="intlRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="intl" />

另外文章开头没有选择用zkclient,是网上看到一些同学用zkclient遇到一些问题,因此也不见建议用,具体的一些问题如下:

  • 修改服务器时间会导致容器挂掉

  • dubbo使用zkclient没有传超时时间导致zookeeper无法连接的时候,直接阻塞Integer.MAX_VALUE



主要参考:

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-Zookeeper%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83


您还想了解或讨论dubbo的哪些内容,请在评论中留言,或者发送邮件到weichengke@email.com,后面的文章会根据大家反馈来进行编写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值