ZK的Java客户端Curator(2)
实践2 节点的增删改查操作
1.创建节点
String nodePath = "/super/hero";
byte[] data = "superme".getBytes();
cto.client.create().creatingParentsIfNeeded()
.withMode(CreateMode.PERSISTENT)
.withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)
.forPath(nodePath, data);
如果不加.withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)会是默认权限:
'world,'anyone: cdrwa
2.更新节点
// 更新节点数据
byte[] newData = "ita7".getBytes();
cto.client.setData().withVersion(0).forPath(nodePath, newData);
withVersion第一次设置0会正常修改,因为创建节点默认版本为0。再次设置0就会报错,乐观锁机制:
Exception in thread "main"
org.apache.zookeeper.KeeperException$BadVersionException:
KeeperErrorCode = BadVersion for /workspace/super/hero
at org.apache.zookeeper.KeeperException.create(KeeperException.java:118)
3.删除节点
// 删除节点
cto.client.delete()
.guaranteed() // 如果删除失败,那么在后端还是继续会删除,直到成功
.deletingChildrenIfNeeded() // 如果有子节点,就删除
.withVersion(0)
.forPath(nodePath);