一、创建,删除,更新
1. zkCli.sh 中使用命令执行。
2. 学会查看api文档
zookeeper C# driver 官方文档,文档是java代码的。
3. create操作中 各个参数的作用
create 中可能抛出的异常(常见的三个异常):
1. create /ctrip ,如果ctrip已经存在,就会抛出异常。
2. create /ctrip/train , 如果说ctrip不存在,就会抛异常。
3. create /ctrip/train , 如果说 ctrip是临时节点,要创建一个永久的train(永久),就会抛异常。
4. znode数据的最大容量是,1MB
二、创建节点
ZooKeeper zookeeper = new ZooKeeper("192.168.84.136:2181/datamip", TimeSpan.FromSeconds(),new ZookeeperWatcher()); //通过wait函数,等待ZookeeperWatcher 回调函数执行成功
ZookeeperWatcher.countdownEvent.Wait();
var list = zookeeper.GetChildren("/", false);
var path = string.Empty;
try
{
//添加节点
path = zookeeper.Create("/v1dragon", Encoding.UTF8.GetBytes("helloworld"),
Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent); //持久的节点 //CreateMode.Persistent; 持久的节点
//CreateMode.EphemeralSequential; 临时顺序节点
//CreateMode.PersistentSequential; 持久顺序节点
}
catch (KeeperException ex)
{
throw new Exception(ex.Message);
}
创建成功
三、 删除节点
1. version 基于CAS的删除,还是强制删除。
2. delete 可能会有三种异常:
a. NoNode , 没有该节点
b. BadVersion, 错误的版本好
c. NotEmpty, 如果删除的父节点,下面有子节点,是不能被删除的。
递归删除 【stat numChildren: 标识是否有子节点】
var path = string.Empty;
try
{//删除节点
//先查询vdragon节点数据
Stat stat = new Stat();
zookeeper.GetData("/vdragon", false, stat);
//获取节点版本号
zookeeper.Delete("/vdragon", stat.Version);
}
catch (KeeperException ex)
{
throw new Exception(ex.Message);
}
节点被删除
四、更新节点
1. update可能抛出的异常
a. NoNode , 没有该节点
b. BadVersion, 错误的版本好
c. 数据不能超过1MB
var path = string.Empty;
try
{
Stat stat = new Stat();
//修改节点
stat = zookeeper.SetData("/v1dragon", Encoding.UTF8.GetBytes("helloworlddragon"), -);
}
catch (KeeperException ex)
{
throw new Exception(ex.Message);
}