2019独角兽企业重金招聘Python工程师标准>>>

准备:

要么使用maven,要么手动引入zookeeper-3.4.6.jar和zk包lib文件夹下的jar包,slf4j-api-1.6.1.jar等

示例代码:

同步接口:

package raw_client;import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class SyncApi implements Watcher
{private static CountDownLatch connectedSemaphore = new CountDownLatch(1);private static Stat stat = new Stat();private static final Logger log = LoggerFactory.getLogger(SyncApi.class);static ZooKeeper zk = null;static String path = "/zk_test";public static void main(String[] args) throws IOException, InterruptedException, KeeperException{// ----------------------连接---------------------------// 直接连连不上 state: Expiredlong sessionID = 1111111;String sessionPWD = "s1_pwd";SyncApi sa = new SyncApi();zk = new ZooKeeper("127.0.0.1:2181", 5000, sa, sessionID, sessionPWD.getBytes());log.info("ZooKeeper state: " + zk.getState());ZooKeeper zk1 = new ZooKeeper("127.0.0.1:2181", 5000, sa);long sessionId = zk1.getSessionId();byte[] passwd = zk1.getSessionPasswd();connectedSemaphore.await();log.info("ZooKeeper session established.");// 错误的session state: Expiredzk = new ZooKeeper("127.0.0.1:2181", 5000, sa, 1l, "test".getBytes());// 正确的session state: SyncConnectedzk = new ZooKeeper("127.0.0.1:2181", 5000, sa, sessionId, passwd);zk.exists(path, true);//----------------------------创建节点------------------------String pPath = zk.create(path, "fad".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// 下面这行报NodeExistsException//        zk.create(path, "fad".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);String esPath = zk.create(path, "fad".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);String psPath = zk.create(path, "fad".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);/* java进程结束后,临时节点消失[zk: localhost:2181(CONNECTED) 29] ls /[zk_test0000000011, zookeeper, zk_test0000000010, zk_test][zk: localhost:2181(CONNECTED) 30] ls /[zk_test0000000011, zookeeper, zk_test]*///----------------------------删除节点------------------------zk.delete(psPath, -1);zk.delete(esPath, 0);// 下面这行报BadVersion//        zk.delete(pPath, 10);//----------------------------获取数据------------------------log.info(new String(zk.getData(path, sa, stat)));log.info("Signature: " + stat.signature() + " Ctime: " + stat.getCtime() + " Aversion: " + stat.getAversion()+ " Cversion: " + stat.getCversion() + " Czxid: " + stat.getCzxid() + " DataLength: "+ stat.getDataLength() + " Mtime: " + stat.getMtime() + " Mzxid: " + stat.getMzxid() + " NumChildren: "+ stat.getNumChildren() + " Version: " + stat.getVersion() + " Pzxid: " + stat.getPzxid());//----------------------------更新数据------------------------// 测试watcher,下面这行触发NodeDataChanged类型的事件zk.setData(path, "update123".getBytes(), 0);//----------------------------获取子节点------------------------List<String> childrenList = zk.getChildren(path, sa, stat);log.info(childrenList.toString());zk.create(path + "/c1", "c11111111".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);Thread.sleep(2000);// 清理数据// 如果有子节点,直接删除会报错:Directory not empty for /zk_test// 先删除子节点zk.delete(path + "/c1", -1);zk.delete(path, -1);Thread.sleep(2000);zk.close();//----------------------------AuthInfo------------------------String childPath = path + "/c1";connectedSemaphore = new CountDownLatch(1);zk = new ZooKeeper("127.0.0.1:2181", 5000, sa);zk.addAuthInfo("digest", "key:value1".getBytes());connectedSemaphore.await();// 这里ACL和上面不同,否则加了AuthInfo也没有效果zk.create(path, "f".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);Thread.sleep(1000);zk.create(childPath, "c".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);Thread.sleep(1000);// 认证失败不可以删除子节点try{connectedSemaphore = new CountDownLatch(1);ZooKeeper zk2 = new ZooKeeper("127.0.0.1:2181", 5000, sa);connectedSemaphore.await();// NoAuth for /zk_test/c1zk2.delete(childPath, -1);}catch (Exception e){log.info("delete node " + path + "c1" + " fail: " + e.getMessage());}// 认证成功可以删除子节点connectedSemaphore = new CountDownLatch(1);ZooKeeper zk3 = new ZooKeeper("127.0.0.1:2181", 5000, sa);connectedSemaphore.await();zk3.addAuthInfo("digest", "key:value1".getBytes());zk3.delete(childPath, -1);log.info("deleted node " + childPath);// 节点本身无法限制权限connectedSemaphore = new CountDownLatch(1);ZooKeeper zk4 = new ZooKeeper("127.0.0.1:2181", 5000, sa);connectedSemaphore.await();zk4.delete(path, -1);log.info("deleted node " + path);Thread.sleep(Integer.MAX_VALUE);}@Overridepublic void process(WatchedEvent event){log.info("----------------");log.info("event: {}", event);log.info("path: {}", event.getPath());log.info("state: {}", event.getState());log.info("type: {}", event.getType());log.info("----------------");try{if (KeeperState.SyncConnected == event.getState()){if (event.getType() == EventType.None && null == event.getPath()){connectedSemaphore.countDown();}else if (event.getType() == EventType.NodeDataChanged){log.info(new String(zk.getData(event.getPath(), true, stat)));log.info(stat.getCzxid() + "," + stat.getMzxid() + "," + stat.getVersion());}else if (event.getType() == EventType.NodeChildrenChanged){List<String> childrenList = zk.getChildren(path, false);log.info("changed child: " + childrenList.toString());}else if (EventType.NodeCreated == event.getType()){log.info("Node(" + event.getPath() + ")Created");zk.exists(event.getPath(), true);}else if (EventType.NodeDeleted == event.getType()){log.info("Node(" + event.getPath() + ")Deleted");zk.exists(event.getPath(), true);}}}catch (Exception e){log.error(e.toString());}}
}

异步接口:

package raw_client;import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class AsyncApi implements Watcher
{private static CountDownLatch connectedSemaphore = new CountDownLatch(1);private static Stat stat = new Stat();static ZooKeeper zk = null;private static final Logger log = LoggerFactory.getLogger(AsyncApi.class);public static void main(String[] args) throws IOException, InterruptedException, KeeperException{zk = new ZooKeeper("127.0.0.1:2181", 5000, new AsyncApi());connectedSemaphore.await();//----------------------------创建节点------------------------String path = "/zk_test";zk.create(path, "main".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new MyStringCallback(), "contex");//----------------------------获取数据------------------------zk.getData(path, true, new MYDataCallback(), null);//----------------------------更新数据------------------------zk.setData(path, "childdata".getBytes(), 0);//----------------------------获取子节点------------------------zk.create(path + "/c1","child".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT,new MyStringCallback(),"contex");zk.getChildren(path, true, new MyChildren2Callback(), "ctx");zk.getChildren(path, true, new MyChildrenCallback(), "ctx");//----------------------------删除节点------------------------Thread.sleep(2000);zk.delete(path + "/c1", -1);zk.delete(path, -1, new MyVoidCallback(), "ctx");Thread.sleep(Integer.MAX_VALUE);}@Overridepublic void process(WatchedEvent event){log.info("event: {}", event);log.info("path: {}", event.getPath());log.info("state: {}", event.getState());log.info("type: {}", event.getType());if (KeeperState.SyncConnected == event.getState()){if (event.getType() == EventType.None && null == event.getPath()){connectedSemaphore.countDown();}else if (event.getType() == EventType.NodeDataChanged){try{log.info(new String(zk.getData(event.getPath(), true, stat)));log.info(stat.getCzxid() + "," + stat.getMzxid() + "," + stat.getVersion());}catch (Exception e){}}}}}class MyStringCallback implements AsyncCallback.StringCallback
{private static final Logger log = LoggerFactory.getLogger(MyStringCallback.class);@Overridepublic void processResult(int rc, String path, Object ctx, String name){log.info("Create path result: [" + rc + ", " + path + ", " + ctx + ", real path name: " + name);}
}class MyVoidCallback implements AsyncCallback.VoidCallback
{private static final Logger log = LoggerFactory.getLogger(MyVoidCallback.class);@Overridepublic void processResult(int rc, String path, Object ctx){log.info("delete path result: " + rc + ", " + path + ", " + ctx);}
}class MYDataCallback implements AsyncCallback.DataCallback
{private static final Logger log = LoggerFactory.getLogger(MYDataCallback.class);@Overridepublic void processResult(int rc, String path, Object ctx, byte[] data, Stat stat){log.info(rc + ", " + path + ", " + new String(data));log.info(stat.getCzxid() + "," + stat.getMzxid() + "," + stat.getVersion());}
}class MyChildren2Callback implements AsyncCallback.Children2Callback
{private static final Logger log = LoggerFactory.getLogger(MyChildren2Callback.class);@Overridepublic void processResult(int rc, String path, Object ctx, List<String> children, Stat stat){log.info("Get Children znode result: [response code: " + rc + ", param path: " + path + ", ctx: "+ ctx + ", children list: " + children + ", stat: " + stat);}
}class MyChildrenCallback implements AsyncCallback.ChildrenCallback
{private static final Logger log = LoggerFactory.getLogger(MyChildrenCallback.class);@Overridepublic void processResult(int rc, String path, Object ctx, List<String> children){log.info("Get Children znode result: [response code: " + rc + ", param path: " + path + ", ctx: "+ ctx + ", children list: " + children);}
}

转载于:https://my.oschina.net/bigsloth/blog/389044

ZooKeeper原生java客户端使用相关推荐

  1. ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用

    zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...

  2. Zookeeper的java客户端Curator

    Zookeeper的java客户端Curator 常见的zookeeper java API: Curator API 常用操作 建立连接 添加节点 删除节点 修改节点 查询节点 watch事件监听 ...

  3. 原生 Java 客户端进行消息通信

    原生 Java 客户端进行消息通信 Direct 交换器 DirectProducer:direct类型交换器的生产者 NormalConsumer:普通的消费者 MulitBindConsumer: ...

  4. java消息通信_原生 Java 客户端进行消息通信

    原生 Java 客户端进行消息通信 Direct 交换器 DirectProducer:direct类型交换器的生产者 NormalConsumer:普通的消费者 MulitBindConsumer: ...

  5. ZooKeeper :Java客户端Watcher API介绍

    ZooKeeper :Java客户端Watcher API介绍 在上一篇博客中,博主给大家介绍了Java客户端的Session.ACL以及Znode API: ZooKeeper :Java客户端Se ...

  6. 【Java从0到架构师】Zookeeper 应用 - Java 客户端操作、服务器动态感知、分布式锁业务处理

    分布式基石 Zookeeper 框架全面剖析 Java 客户端操作 Java 客户端 API 服务器的动态感知 服务注册 服务发现 分布式锁业务处理 单机环境(一个虚拟机中) 分布式环境_同名节点 分 ...

  7. 13.Zookeeper的java客户端API使用方法

    转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027 转载于:https://www.cnblogs.com/sharpest/ ...

  8. idea zookeeper插件使用_zookeeper的Java客户端操作

    客户端选择 zookeeper的Java客户端主要有zkclient和Curator,此篇文章介绍Curator,就冲他官网的简介,zookeeper书的作者Patrick Hunt给了这么高的评价: ...

  9. Zookeeper实战之客户端Curator vs zkClient

    1. zookeeper应用开发 Zookeeper应用开发,需要使用Zookeeper的java 客户端API ,去连接和操作Zookeeper 集群. 可以供选择的java 客户端API 有:Zo ...

最新文章

  1. TensorRT-8量化分析
  2. Nginx解决PATH_INFO新解决办法
  3. 热点账户问题和常用解决方案【上】
  4. 练习、C# 结构体、冒泡排序
  5. 前端学习(1156):let var const的区别
  6. linux apache jk,Linux下Apache+Tomcat+JK实现负载均衡和群集的完整过程
  7. Docker存储驱动devicemapper介绍和配置
  8. wangEditor-3.1.1 自己扩展的,增加代码块行号
  9. A股开盘:深证区块链50指数涨0.94%,*ST晨鑫涨停
  10. 计算机基础知识 笔试,计算机基础知识笔试题
  11. Java Reflect
  12. jsp登陆界面链接mysql_用jsp实现网站登录界面的制作,并连接数据库
  13. Java实现阿里云企业邮箱发送邮件
  14. 准考证丢失后如何查询四六级成绩
  15. 详解矩阵算法在电商sku组件中的应用一
  16. 腾讯云运维干货沙龙-海量运维实践大曝光 (一)
  17. 试图加载格式不正确的程序。 (Exception from HRESULT: 0x8007000B)
  18. IP地址管理常见功能解析
  19. 减少USB 1.1 2.0 端口驱动程序延时_旅行伴侣 紫米65W单USB-C口PD快充头 双十一不可错过数码单品好物...
  20. 人工智能期末复习(一)

热门文章

  1. 服务器电源控制芯片,服务器电源中的PFC控制芯片HA16141的应用.pdf
  2. -bash: vim: command not found 两种解决方法
  3. c++ 海战棋_编程入门须知:都说零基础不好学编程,那么什么是编程基础?
  4. linux定时备份文件到指定文件夹,Linux定时备份数据库到指定邮箱的方法
  5. 用友未获得服务器信息,客户端查询银行日记账没有数据出现,其他客户端和服务器正常...
  6. 通过build.xml在Eclipse中导入工程
  7. 风变编程Python9 函数的学习
  8. mysql 索引建立标准_mysql索引规范
  9. 当前页面excel导出_系统地学习Excel第03课,Excel的工作界面
  10. 麦亡9什么时候能装鸿蒙系统,距断供不到10天 麒麟9000即将绝版 华为大招来了:不止鸿蒙2.0...