《ZooKeeper》---原生的API中的增删改查操作
来源:互联网 发布:知乎怎么回答问题 编辑:程序博客网 时间:2024/06/05 14:21
前言
- 上一篇文章中,小编简单的介绍了zookeeper集群的搭建,这篇文章了,小编继续带读者探索zookeeper的基本操作。在zookeeper的原生的API中,他的增删改查操作都有同步和异步的两种方式,下面是具体的代码。
1、建立连接
/** zookeeper地址 */static final String CONNECT_ADDR = "192.168.141.140:2181,192.168.141.141:2181,192.168.141.143:2181";/** session超时时间 */static final int SESSION_OUTTIME = 5000;//ms /** 信号量,阻塞程序执行,用于等待zookeeper连接成功,发送成功信号 */static final CountDownLatch connectedSemaphore = new CountDownLatch(1);public static void main(String[] args) throws Exception{ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){ @Override public void process(WatchedEvent event) { //获取事件的状态 KeeperState keeperState = event.getState(); //获取事件的类型 EventType eventType = event.getType(); //如果是建立连接(SyncConnected表示连接成功的状态) if(KeeperState.SyncConnected == keeperState){ if(EventType.None == eventType){ //如果建立连接成功,则发送信号量,让后续阻塞程序向下执行 connectedSemaphore.countDown(); System.out.println("zk 建立连接"); } } }});//进行阻塞connectedSemaphore.await();/*.....................在这进行的是增删改查操作*/zk.close();
2、创建节点
String result=zk.create("/testRoot", "testRoot".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- 由于原生的API在创建节点时不支持递归创建,所以当我们创建子节点的时候只能在父节点的基础上创建,代码如下。
zk.create("/testRoot/children", "children data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- 在创建节点的时候,我们需要将节点的value转化成字节数组,然后再将字节数组的值存入zookeeper的该节点中,当取该节点的时候,我们取的也是字节数组,我们需要将数组的值重新还原才能显示出来。
3、获取节点
获取父节点的值
byte[] data = zk.getData("/testRoot", false, null);
获取子节点的值
List<String> children = zk.getChildren("/testRoot", false);for (String path : children) { System.out.println(path); String realPath ="/testRoot/" + path; System.out.println(new String(zk.getData(realPath, false, null)));}
4、修改节点的值
zk.setData("/testRoot", "modify data root".getBytes(), -1);
5、删除节点
zk.delete("/testRoot", -1, new AsyncCallback.VoidCallback() { @Override public void processResult(int rc, String path, Object ctx) { System.out.println(rc);//rc 为服务响应码 0 代表调用成功,-4代表端口连接,-110表示指定节点存在,-112表示会话已经过期 System.out.println(path);//path 接口调用时传入API的数据节点的路径参数 System.out.println(ctx);// 调用接口传入API ctx的值 再此 ctx的值为 “这是回调函数中传入的参数” }}, "这是回调函数中传入的参数");
小结
- 上面便是zookeeper原生的API中,对节点的CRUD操作,原生的API,对节点的增加还有删除都不能实现递归操作,操作起来确实有点麻烦,但是为了了解原生API的知识,不得不去总结一下。
1 0
- 《ZooKeeper》---原生的API中的增删改查操作
- ZooKeeper学习笔记:使用zookeeper的API实现增删查改以及客户端的观察者模式
- Elasticsearch 单模式下API的增删改查操作
- hbase 增删改查 api 简单操作
- java mongdodb API增删改查操作
- java访问zookeeper的增删改查
- CodeIgniter中的增删改查操作
- CodeIgniter中的增删改查操作
- MySQL中的增删改查操作
- Zookeeper JavaApi 增删改查
- ElasticSearch的增删改查API介绍
- 增删查改操作
- 原生JavaScript实现列表/表格的增删查改
- 原生代码封装好的增删改查
- 使用java原生jdbc完成数据的增删改查
- 嵌套表的操作(增删改查)
- java操作mysql的增删改查
- java操作mysql的增删改查
- Spring mvc,jQuery和JSON数据交互
- JAVA经典算法-冒泡排序和快速排序
- 欧几里得算法(辗转相除)
- redis有序集合中是否存在某个成员
- Spark源码学习笔记3-LiveListenerBus
- 《ZooKeeper》---原生的API中的增删改查操作
- 计算机Win10黑屏
- Linux学习笔记(一)-Linux操作系统启动流程以及系统关机命令
- android开发之Intents and Intent Filters
- 1109. Group Photo 解析
- Python中的__future__模块
- Java设计模式--单例设计模式
- Win10安装之路
- Myeclipse项目通过built Path添加Jar包,运行仍然提示没有**.jar