支持断线重连、永久watcher、递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端

 

在公司内部的微服务架构中有使用到了“ZooKeeper”,虽然官方有提供了.NET的SDK,但易用性非常的差,且搜遍github、nuget,没有发现一个可以跨平台且易用的组件,所以我又“美化”了一个轮子。

什么是ZooKeeper?

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

项目介绍

该项目使用了 Apache ZooKeeper .NET async Client 组件,除提供了基本的zk操作,还额外封装了常用的功能以便让.net开发者更好的使用zookeeper。

此项目是开源的,采用了:Apache 2.0开源协议。

支持的平台

  1. .NET 4及以上
  2. .NET Core

项目地址

GitHub:https://github.com/RabbitTeam/zookeeper-client

NuGet:https://www.nuget.org/packages/Rabbit.Zookeeper/

提供的功能

  1. session过期重连
  2. 永久watcher
  3. 递归删除节点
  4. 递归创建节点
  5. 跨平台(支持.net core)

使用说明

下面列一下常用的使用方法,不仅限于此哦!

创建连接

创建节点

获取节点数据

获取子节点

判断节点是否存在

删除节点

更新节点

订阅数据变化

订阅子节点变化

FAQ

什么时候会触发 "SubscribeDataChange" 事件 ?

在以下情况下会触发通过 "SubscribeDataChange" 方法订阅的事件:

  1. 节点被创建
  2. 节点被删除
  3. 节点数据发生改变
  4. zk连接重连成功

什么时候会触发 "SubscribeChildrenChange" 事件 ?

在以下情况下会触发通过 "SubscribeChildrenChange" 方法订阅的事件:

  1. 节点被创建
  2. 节点被删除
  3. 节点子节点发生改变
  4. zk连接重连成功

如何在 "xxxxChange" 事件中区分节点的状态 ?

在事件触发参数会有个类型为 "EventType" 的属性 "Type",通过该属性可以清楚的区分出节点变更的原因。

为什么要写这个程序,它与 "ZooKeeperEx" 有什么区别 ?

官方提供的组件,只提供了基本的api,在正常的zk使用情景中需要做非常复杂的事情,滋生出很多额外的代码并且不能保证其执行的正确性。

在java语言中也有对官方zk进行封装的包 ZKClient,当前组件也是参考了这个项目。具体组件包提供了什么功能请参考 "提供的功能" 这一节。

有问题怎么办?

可以通过以下方式联系我(依据最容易得到处理优先级排序):

  1. 在github上建立Issues
  2. 加入QQ群:384413261(点击加入:RabbitHub)进行提问
  3. 给我发邮件,majian159@live.com
  4. 站内私信我

.NET Core)的ZooKeeper异步客户端的更多相关文章

  1. 支持断线重连、永久watcher、递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端

    在公司内部的微服务架构中有使用到了"ZooKeeper",虽然官方有提供了.NET的SDK,但易用性非常的差,且搜遍github.nuget,没有发现一个可以跨平台且易用的组件,所 ...

  2. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  3. Zookeeper(一)客户端

    Zookeeper-客户端 例子: // org.apache.zookeeper.ZooKeeperMain public class ZooKeeperMain { public static v ...

  4. Tornado 异步客户端

    前言 Tornado是很优秀的非阻塞式服务器,我们一般用它来写Web 服务器,据说知乎就是用Tornado写的. 如果对tornado源码不是很了解,可以先看一下另一篇文章: http://yunji ...

  5. PostgreSQL异步客户端(并模拟redis 数据结构)

    以前为了不在游戏逻辑(对象属性)变更时修改数据库,就弄了个varchar字段来表示json,由服务器逻辑(读取到内存)去操作它. 但这对运维相当不友好,也不能做一些此Json数据里查询. 所以后面就用 ...

  6. 处理ASP.NET Core中的HTML5客户端路由回退

    在使用由Angular,React,Vue等应用程序框架构建的客户端应用程序时,您总是会处理HTML5客户端路由,它将完全在浏览器中处理到页面和组件的客户端路由.几乎完全在浏览器中... HTML5客 ...

  7. Asynchronous MQTT client library for C (MQTT异步客户端C语言库-paho)

    原文:http://www.eclipse.org/paho/files/mqttdoc/MQTTAsync/html/index.html MQTT异步客户端C语言库   用于C的异步 MQTT 客 ...

  8. 微信公众平台.net HttpClient 异步客户端

    微信公众平台.net HttpClient 异步客户端 该客户端实现了对微信公众平台的后台管理,包括获取Token,发生客服消息(文本,图片,语音,视频),自定义菜单的创建,查询,删除,查询订阅用户, ...

  9. zookeeper curator客户端之增删改查

    zookeeper curator客户端之增删改查 zookeeper安装:https://www.cnblogs.com/zwcry/p/10272506.html curator客户端是Apach ...

随机推荐

  1. UITableView传值(自己使用)(属性,代理传值)

    今天有些匆忙. 效果图如下: 代码如下: #import <UIKit/UIKit.h> #import "FirstViewController.h" @interf ...

  2. 转载:设置html页面不让浏览器缓存的方法

    本文是转载文章,只是方便自己记录. 在html页面head标签之间添加以下标识可以避免大多数浏览器缓存: <meta http-equiv="Pragma" content= ...

  3. jQuery.noConflict() 函数

    jQuery.noConflict()函数用于让出jQuery库对变量$(和变量jQuery)的控制权. 一般情况下,在jQuery库中,变量$是变量jQuery的别名,它们之间是等价的,例如jQue ...

  4. linux 中的 tar 解压

    Type at the command prompt tar xvzf file-1.0.tar.gz - tgfo uncompress a gzip tar file (.tgz or .tar. ...

  5. Newtonsoft.Json 把对象转换成json字符串

    var resultJson = new { records = rowCount, page = pageindex, //总页数=(总页数+页大小-1)/页大小 total = (rowCount ...

  6. 1、HTML学习 - IT软件人员学习系列文章

    本文做为<IT软件人员学习系列文章>的第一篇,将从最基本的开始进行描述,了解的人完全可以跳过本文(后面会介绍一些工具). 今天讲讲Web开发中最基础的内容:HTML(超文本标记语言).HT ...

  7. 【JavaScript】EasyUI框架的Dialog控件根据浏览器分辨率自动调节宽高

    序: 如果单独一个或几个Dialog控件修改成根据浏览器可视界面自动调整高.宽很容易仅仅是一个量变的过程,但如果大量页面都引入了Dialog控件,修改起来是一个很消耗体力的工作.所以接到任务后第一想法 ...

  8. my_strlen()

    int my_strlen(const char* S){ int i=0; while('\0'!=*(S+i)){ i++; } return i; }

  9. 列表list

    Python是一种面向对象的语言,但它不像C++一样把标准类都封装到库中,而是进行了进一步的封装,语言本身就集成一些类和函数,比如print,list,dict etc. 给编程带来很大的便捷 Pyt ...

  10. Android中使用dimen定义尺寸(转)

    (转自:http://blog.csdn.net/yuzhiboyi/article/details/7696174) 最近,遇到了一种定义尺寸的方法,类似于C里面的宏定义一样,其实以前已经见过了这种 ...