ZookeeperNet(C#)使用——watcher触发

网上关于java的Zookeeper开源jar包的使用有很多,但C#的ZookeeperNet还不是很多,做项目的时候也遇到了很多问题,主要还是对这些方法的使用不清晰,于是我就把每个方法都测了一遍。
这里,分享一下我的使用经验。

createsetDatadeleteNone
existAsync(path,watcher)YYYY
getDataAsync(path,watcher)NYYY
getChildrenAsync(path,watcher)YNYY
  • exist(path,watcher)
    触发:path create/path delete/setdata 会触发
    注册:node不存在不会抛NoNodeException
    在这里插入图片描述
    也就是说不存在的点也可以监听,当他创建时会通知!(提前监听)
  • getdata(path,watcher)
    触发:setData(path) /delete(path)
    注册:节点不存在会抛NoNodeException
    get不能对不存在的节点注册监听
    在这里插入图片描述
    这里一定要注意加await zk.getDataAsync(path, watcher),不加await是catch不了异常的!!!
await zk.getDataAsync(path, watcher)
  • getChildren
    在这里插入图片描述
    getChildren的节点必须存在! 否则会抛出NoNodeException。
  • None事件
    None事件主要就是当zookeeper实例的连接状态发生变化时会通知所有的watcher。
    一点经验:我在用VS断点调试时,经常会出现这个None事件,但我去查看连接状态却发现明明是Connected啊?我想这可能是停顿时间过长,Disconnected了但因为zk客户端本身带有自动重连的机制,所以又连上了。
    在这里插入图片描述
    这里需要注意,对于普通的节点watcher最好不要处理None事件。
  • 其它一些经验:

在这里插入图片描述
对于同一个Watcher实例,即使用不同的方法注册了多次,当事件发生时,还是只会通知一次。
但如果用同一个方法,两个watcher去注册监听,这时是都会通知的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是ZooKeeper ? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 Rabbit ZooKeeper Extensions 该项目使用了 Apache ZooKeeper .NET async Client 组件,除提供了基本的zk操作,还额外封装了常用的功能以便让.net开发者更好的使用zookeeper。 提供的功能 session过期重连 永久watcher 递归删除节点 递归创建节点 跨平台(支持.net core) 使用说明 创建连接 IZookeeperClient client = new ZookeeperClient(new ZookeeperClientOptions         {             ConnectionString = "172.18.20.132:2181",             BasePath = "/", //default value             ConnectionTimeout = TimeSpan.FromSeconds(10), //default value             SessionTimeout = TimeSpan.FromSeconds(20), //default value             OperatingTimeout = TimeSpan.FromSeconds(60), //default value             ReadOnly = false, //default value             SessionId = 0, //default value             SessionPasswd = null //default value         }); 创建节点 var data = Encoding.UTF8.GetBytes("2016"); //快速创建临时节点 await client.CreateEphemeralAsync("/year", data); await client.CreateEphemeralAsync("/year", data, ZooDefs.Ids.OPEN_ACL_UNSAFE); //快速创建永久节点 await client.CreatePersistentAsync("/year", data); await client.CreatePersistentAsync("/year", data, ZooDefs.Ids.OPEN_ACL_UNSAFE); //完整调用 await client.CreateAsync("/year", data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); //递归创建 await client.CreateRecursiveAsync("/microsoft/netcore/aspnet", data, CreateMode.PERSISTENT); 获取节点数据 IEnumerable data = await client.GetDataAsync("/year"); Encoding.UTF8.GetString(data.ToArray()); 获取子节点 IEnumerable children= await client.GetChildrenAsync("/microsoft"); 判断节点是否存在 bool exists = await client.ExistsAsync("/year"); 删除节点 await client.DeleteAsync("/year"); //递归删除 bool success = await client.DeleteRecursiveAsync("/microsoft"); 更新数据 Stat stat = await client.SetDataAsync("/year", Encoding.UTF8.GetBytes("2017")); 订阅数据变化 await client.Subscrib

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值