项目介绍
ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目。
Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
Zookeeper 在Windows安装和使用,可参考http://www.cnblogs.com/shanyou/p/3221990.html
ZookeeperClient是在https://github.com/shayhatsor/zookeeper基础上的再次封装,使开发者更方便使用ZooKeeper相关的功能。
ZookeeperClient实现了断线重连,会话过期重连,永久监听,子节点数据变化的监听。并且加入了常用功能,例如分布式锁,Leader选举,分布式队列
,项目地址https://github.com/milanyangbo/ZooKeeper.Net
支持的平台
.NET 4及以上,目前尚不支持.NET Core, .NET Core推荐用另外一个项目 支持断线重连、永久watcher、递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端
使用说明
下面列一下常用的使用方法,不仅限于此哦!
一、创建ZKClient对象
创建ZKClient对象 有两种方式可以方便的创建ZKClient对象
使用构造函数创建
string address = "localhost:2181";
ZKClient zkClient1 = new ZKClient(address);
ZKClient zkClient2 = new ZKClient(address, TimeSpan.FromMilliseconds(10000));
ZKClient zkClient3 = new ZKClient(address, TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(10000));
ZKClient zkClient4 = new ZKClient(address, TimeSpan.FromMilliseconds(30000), TimeSpan.FromMilliseconds(10000), new SerializableSerializer());
ZKClient zkClient5 = new ZKClient(address, TimeSpan.FromMilliseconds(30000), TimeSpan.FromMilliseconds(10000), new SerializableSerializer(), TimeSpan.FromMilliseconds(60000));
使用辅助类创建
string address = "localhost:2181";
ZKClient zkClient = ZKClientBuilder.NewZKClient(address)
.SessionTimeout(30000)//可选
.Serializer(new SerializableSerializer())//可选
.RetryTimeout(60000)//可选
.ConnectionTimeout(10000)//可选
.Build(); //创建实例
二、节点的新增、更新、删除和获取
新增节点
常规新增节点
父节点不存在会抛出异常
await zkClient.CreateAsync("/test1", "123", CreateMode.EPHEMERAL); await zkClient.CreateAsync("/test1-1", 123, CreateMode.EPHEMERAL_SEQUENTIAL); await zkClient.CreateAsync("/test1-2", 123, CreateMode.PERSISTENT); await zkClient.CreateAsync("/test1-3", 123, CreateMode.PERSISTENT_SEQUENTIAL);
递归新增节点(新增节点及其父节点)
如果父节点不存在会被一并创建。
对于PERSISTENT类型的节点,递归创建,父节点和子节点都创建为PERSISTENT。
对于EPHEMERAL类型的节点,递归创建,父节点都是PERSISTENT类型,而最后一级节点才是EPHEMERAL类型。(因为EPHEMERAL不能拥有子节点)
注意:第二个参数为节点的值,指的的最后一级节点的值。
string path = "/test8/1/2/3"; //递归创建节点及父节点
await zkClient.CreateRecursiveAsync(path, "abc", CreateMode.PERSISTENT); await zkClient.CreateRecursiveAsync(path, "123", ZooDefs.Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
特殊的EPHEMERAL类型节点
特殊类型的EPHEMERAL节点,该节点在会话失效被删除后,重新连接会被自动创建。