Dubbo学习笔记1:使用Zookeeper搭建服务治理中心
Zookeeper是Apache Hadoop的子项目,是一个树形的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,推荐生成环境使用。
,
下面结合上图介绍Zookeeper在服务注册与发现里面的应用:
如上图整体Zookeeper的树根Root是Dubbo,说明建立的Zookeeper分组为Dubbo,树的第二层为Service层用来表示具体的接口服务,这里为com.test.UserServiceBo接口服务,树的第三层为Type层用来区分是服务提供者,还是服务消费者,还是路由规则等,树的第四层URL是具体服务提供者或者消费者对应的机器列表或者具体的路由规则。
假设服务提供者对外提供com.test.UserServiceBo的实现类的服务,那么当服务提供者启动时候,Provider会通过ZKClient在Zookeeper服务端的/dubbo/com.test.UserServiceBo/providers目录下写入自己的URL地址。如果服务提供者有多个,那么providers下就会有多个地址,这里需要注意的是这里的树形目录不一定是二叉树,假如服务提供者有100个机器,那么providers下就会有100个节点的。
假设服务消费者需要使用com.test.UserServiceBo接口的服务,那么当服务消费者启动时候,Consumer会通过ZKClient订阅Zookeeper服务端的/dubbo/com.test.UserServiceBo/providers目录下提供的服务提供方的URL地址列表。并且在/dubbo/com.test.UserServiceBo/consumers目录下写下自己的URL地址,这里要记录服务消费者的地址是为了当服务提供者地址列表变化时候(比如新增了机器,减少了机器)时候,Zookeeper可以通知订阅该服务的订阅者。
监控中心和管理控制台在启动时候会通过ZKClient订阅Zookeeper服务端的/dubbo/com.test.UserServiceBo/目录下的内容,并通过providers和consumers子目录区分哪些是服务提供者列表,哪些是服务消费者列表,另外管理控制台还可以写入路由规则到/dubbo/com.test.UserServiceBo/routers目录,这些路由规则也会被推送到服务消费端。
当服务提供者集群中有一台机器挂了后,Zookeeper能及时通过长链断开发现该机器挂了,并会从Zookeeper注册中心服务提供者的providers目录下删除该机器,然后会通知服务消费者更新可用的服务提供者地址列表。由于zookeeper支持持久化存储,所以当zookeeper重启后,可以自动恢复服务注册信息。
Zookeeper的安装
下面使用Apache Zookeeper作为服务注册中心,首先要进行Zookeeper的搭建。
首先需要到Apache官网上下载安装包,地址为http://zookeeper.apache.org/releases.html,本文使用的是zookeeper-3.4.11版本,如下图:

解压该包后,如下图:

然后修改zookeeper-3.4.11/conf文件夹里面的zoo.cfg文件。
- 设置配置项dataDir为一个存在的以data结尾的目录;
- 设置Zookeeper的监听端口clientPort=2181
- 设置Zookeeper心跳检查间隔tickTime=2000
- 设置Follower服务器启动时候从Leader同步完毕数据能忍受多少个心跳时间间隔数initLimit=5
设置运行过程中Leader同步数据到Follower后,Follower回复信息到Leader的超时时间syncLimit=2,如果Leader超过syncLimit个tickTime的时间长度,还没有收到Follower响应,那么就认为这个Follower已经不在线了,如下图:

最后在zookeeper-3.4.11/bin下运行sh zkServer.sh start-foreground就会启动Zookeeper,会有下面输出:

可知Zookeeper在2181端口进行监听,至此服务注册中心搭建完毕。
Zookeeper的使用
服务提供方和调用方需要引入ZKClient的jar包才能使用访问Zookeeper服务器,需要在pom里面添加下面依赖。
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
Zookeeper单机配置:指定一个Zookeeper的ip作为服务注册中心。
<dubbo:registry address="zookeeper://12.22.123.101:2181" />
或者:
<dubbo:registry protocol="zookeeper" address="12.22.123.101:2181" />
其中Zookeeper指明使用Zookeeper作为服务注册中心,12.22.123.101:2181是Zookeeper的服务器地址和服务监听端口号。
Zookeeper集群配置:指定多个ip作为服务注册中心:
<dubbo:registry address="zookeeper://11.10.13.10:2181?backup=11.20.153.111:2181,11.30.
133.112:2181" />
或者:
<dubbo:registry protocol="zookeeper" address="11.10.13.10:2181,11.20.153.111:2181,11.30.
133.112:2181" />
另外你还可以在同一个Zookeeper服务器上划分多个分组,例如下面:
<dubbo:registry id="registry1" protocol="zookeeper" address="10.20.153.10:2181" gr
oup="registry1" />
<dubbo:registry id="registry2" protocol="zookeeper" address="10.20.153.10:2181" gro
up="registry2" />
如上代码,在同一个Zookeeper服务器上划分了两个分组,也就是会有两棵树目录,树根分别为registry1和registry2。
Dubbo学习笔记1:使用Zookeeper搭建服务治理中心的更多相关文章
- Dubbo学习笔记10:Dubbo服务消费方启动流程源码分析
同理我们看下服务消费端启动流程时序图: 在<Dubbo整体架构分析>一文中,我们提到服务消费方需要使用ReferenceConfig API来消费服务,具体是调用代码(1)get()方法来 ...
- Hadoop学习笔记(3)——分布式环境搭建
Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...
- Nutch1.7学习笔记:基本环境搭建及使用
Nutch1.7学习笔记:基本环境搭建及使用 作者:雨水,时间:2013-10-31博客地址:http://blog.csdn.net/gobitan 说明:Nutch有两个主版本1.x和2.x,它们 ...
- 使用Spring Cloud搭建服务注册中心
我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo[Linux上安装Zookeeper以及一些注意事项][一个简单的案例带你入门Dubbo分布式框架],但是小伙伴们应该也看到了,阿里的dubb ...
- 笔记:Spring Cloud Eureka 服务治理
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...
- Spring cloud Eureka 服务治理(搭建服务注册中心)
服务之类是微服务架构中最为核心的基础模块,它主要用来实现各个微服务实例的自动化注册和发现. 1. 服务注册 在服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机. ...
- Dubbo学习笔记2:Dubbo服务提供端与消费端应用的搭建
Demo结构介绍 Demo使用Maven聚合功能,里面有三个模块,目录如下: 其中Consumer模块为服务消费者,里面TestConsumer和consumer.xml组成了基于Spring配置方式 ...
- Dubbo学习笔记4:服务消费端泛化调用与异步调用
本文借用dubbo.learn的Dubbo API方式来解释原理. 服务消费端泛化调用 前面我们讲解到,基于Spring和基于Dubbo API方式搭建简单的分布式系统时,服务消费端引入了一个SDK二 ...
- Dubbo学习笔记3:Dubbo管理控制台与监控中心的搭建
Dubbo源码下载与编译 本文来讲下如何在Dubbo源码编译后,得到用于搭建管理控制台的war包和监控平台的jar包. 首先需要到Github上下载Dubbo的源码,解压后如下: 在dubbo-2.5 ...
随机推荐
- Java基础第一节.Java简介
第一节 Java简介 Java是一个由Sun公司开发而成的新一代的编程语言. Java语言是对软件开发有深远影响.应用前景广泛.具有丰富的类库.继承了C++的传统(摈弃了某些不足)广泛使用的网络编程语 ...
- POJ 2411 Mondriaan's Dream 插头dp
题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...
- 读《我是IT小小鸟》有感
我是一只IT小小鸟,我与IT结缘.书中是作者对个人经历与经验在IT下的体会,却给了我们很好的借鉴. IT这门行业,不仅仅再局限于如我们高中老师教学所要求的内容.IT更加开放,可以通过GitHub.CS ...
- 简单复利计算c语言实现
#include<stdio.h>#include<math.h>float i; //利率 float p; //期初金额 float F; //未来值 int n; //期 ...
- windows 下升级安装mysql8,与旧版本5.6共存
应开发需求,自mysql5.7开始引入json列类型和相关函数.为了提高数据读写的访问效率因此把数据库从mysql 5.6版升级到最新发行版 mysql 8.0.11 . 特此记录下多版本升级共存的过 ...
- Linux_Apache 安装
1.下载依赖扩展 apr.apr-util.pcre(正则依赖) https://apr.apache.org/download.cgi#aprutil1 apr:http://mirrors.shu ...
- Workstation和Virtualbox的虚拟机磁盘扩容方式.
1. 虚拟机磁盘管理, 更改磁盘格式是一个场景 还有一个场景是 硬盘空间不够了 需要扩充. 方法主要有两个. 如果是workstation的的虚拟机. 并且没有快照 可以直接GUI操作 如下图: 虚拟 ...
- HDU4641_K-string
若它的一个子串出现的次数不少于K次,那么这个子串就是一个K-string. 现给出原串,每次可以向该串后面添加一个字符或者询问当前有多少个不同的K-string. 在线添加查询,解法直指SAM. 其实 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- CF992C Nastya and a Wardrobe
我是题面 题意很清晰,这种题,我们当然还是有两种方法来做啦 方法一:找规律 读完题我们来看样例,通过样例一已我们大概可以看出,答案或许是\(n*2^{k+1}\) 肯定不能这么简单对吧,那就来看样例二 ...