zookeeper

主要作用:作为dubbo面向服务架构中服务的信息收集者 可以在其他服务需要的时候提供 例如有新的服务发布的时候 也可以在dubbo中直接使用这个服务

**

树形目录结构

zookeeper保存数据的形式 每个节点可以有状态和值 存储数据就存在value中
**

ls查看某个节点下面有什么节点
stat  get获取状态 值  
create 创建节点和值		-s含有特定序列的节点    -e临时的节点
set 给一个存在的节点设置新的值
delete 删除非空节点
rmr 可以删除非空节点
help 帮助

**

异步回调通知机制

在节点上设置watcher 当节点值被改变的时候会进行通知
**
**

使用

**

创建ZooKeeper对象   
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException{
	this(connectString, sessionTimeout, watcher, false);
}

断开ZooKeeper服务器连接	org.apache.zookeeper.ZooKeeper.close()

创建节点	org.apache.zookeeper.ZooKeeper.create(
String, 
byte[], 
List<ACL>, //可以使用Ids.OPEN_ACL_UNSAFE
CreateMode)//CreateMode本身是一个枚举类型

获取节点上的数据	org.apache.zookeeper.ZooKeeper.getData(
String, 
boolean, 
Stat)

设置节点上的数据	org.apache.zookeeper.ZooKeeper.setData(
String, 
byte[], 
int)//使用-1作为版本号的值时可以匹配所有版本号
判断节点是否存在	org.apache.zookeeper.ZooKeeper.exists(String, boolean)

**

一次性监控

**

getData中的watcher指定一个具体的观察者对象 实现对指定节点的监控 接到zookeeper的通知后就会执行process方法
需要保持程序的运行  只能运行一次

**

持续监控

**

把getData的方法提取出来  在watcher方法中递归调用该方法

**

zookeeper集群

分为leader 和 follower 每个都有三个端口:客户端访问 和leader交换信息 选举leader的端口
**

需要配置server.服务器编号 = 服务器ip地址:和leader交换信息端口 :leader死后重新选举leader的端口

(1)leader创建节点后 follwer可以同步 follwer也可以设置值 也会同步     也就是zookeeper集群没有读写的区别
(2)follwer下线期间的变化会在上线的时候自动同步并且仍然是follwer		这里和redis不同
(3)leader下线后会重新选举leader 愿leader上线后就变成follwer了			
					---相当于配置了哨兵的redis

版权声明:本文为weixin_40695328原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。