支持断线重连、永久watcher、递归操作 ZooKeeper 客户端

本文介绍了ZooKeeper客户端的使用,包括支持的平台、创建ZKClient对象的方法、节点的增删改查、权限管理、监听功能以及扩展的分布式锁、Leader选举和分布式队列等。详细阐述了如何实现断线重连、永久watcher和递归操作,帮助开发者更好地理解和应用ZooKeeper。
摘要由CSDN通过智能技术生成

项目介绍

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对象

  1. 使用构造函数创建

 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)); 


  1. 使用辅助类创建

string address = "localhost:2181";  
   ZKClient zkClient = ZKClientBuilder.NewZKClient(address)  
                              .SessionTimeout(30000)//可选  
                              .Serializer(new SerializableSerializer())//可选  
                              .RetryTimeout(60000)//可选  
                              .ConnectionTimeout(10000)//可选  
                              .Build(); //创建实例


二、节点的新增、更新、删除和获取

新增节点

  1. 常规新增节点

    父节点不存在会抛出异常

    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);
  1. 递归新增节点(新增节点及其父节点)

    如果父节点不存在会被一并创建。
    对于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);

  1. 特殊的EPHEMERAL类型节点

    特殊类型的EPHEMERAL节点,该节点在会话失效被删除后,重新连接会被自动创建。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值