Java操作ZooKeeper(B)
来源:互联网 发布:图片制作pdf软件 编辑:程序博客网 时间:2024/06/05 06:34
创建ZNode
在整个的ZooKeeper 操作过程之中,如果要想进行数据的保存,那么所有的数据一定要有各自的节点,并且在ZooKeeper 里
面节点不允许多级创建,必须一级一级的向下创建。如果要想通过程序进行节点创建那么可以继续使用ZooKeeper 程序类完成,在
这个类中提供有一个创建节点方法:public String create(String path, byte[] data, List< ACL > acl, CreateMode createMode) throws KeeperException,InterruptedException;
|- “String path”:表示要创建节点路径(父节点必须存在);
|- “byte[] data”:表示要在节点上保存的数据,数据必须使用byte 数组来设置;
|- “List< ACL > acl”:设置访问控制列表,这个操作通过“org.apache.zookeeper.ZooDefs.Ids”来进行配置,有如下取值:
|- 随意访问:public static final ArrayList< ACL > OPEN_ACL_UNSAFE;
|- 随意读取:public static final ArrayList< ACL > READ_ACL_UNSAFE;
|- “CreateMode createMode”:表示该节点的类型,对于节点的类型通过“CreateMode”枚举来设置:
|- 永久节点:客户端关闭后该节点依然会保留;
|- 用户定义名称:public static final CreateMode PERSISTENT;
|- 用户定义名称-序列:public static final CreateMode PERSISTENT_SEQUENTIAL;
|- 临时节点:客户端连接时会保留几点,但是关闭之后节点自动删除;
|- 用户定义名称:public static final CreateMode EPHEMERAL;
|- 用户定义名称-序列:public static final CreateMode EPHEMERAL_SEQUENTIAL;
创建永久化的ZNode
public class ZooKeeperCreateZNodeP { private static final String CONNECT_HOSTS = "ZooKeeper主机IP,ZooKeeper主机IP....(,隔开):2181:2181" ; public static void main(String[] args) throws Exception { ZooKeeper zkClient = new ZooKeeper(CONNECT_HOSTS, 2000, new Watcher(){ @Override public void process(WatchedEvent event) { // 此处的方法体暂时为空 }}) ; String noseqZNode = zkClient.create("/java", "新世界,你好!".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT) ; System.out.println("1、创建新节点:" + noseqZNode); String seqZNode = zkClient.create("/bigdata", "世界,晚安!".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL) ; System.out.println("2、创建新节点:" + seqZNode); }}
当前的节点不存在才可以进行创建处理,否则无法创建。
创建临时节点
public class ZooKeeperCreateZNodeE { private static final String CONNECT_HOSTS = "ZooKeeper主机IP,ZooKeeper主机IP....(,隔开):2181" ; public static void main(String[] args) throws Exception { ZooKeeper zkClient = new ZooKeeper(CONNECT_HOSTS, 2000, new Watcher(){ @Override public void process(WatchedEvent event) { // 此处的方法体暂时为空 }}) ; String noseqZNode = zkClient.create("/a", "新世界,你好!".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL) ; System.out.println("1、创建新节点:" + noseqZNode); String seqZNode = zkClient.create("/b", "世界,晚安!".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL) ; System.out.println("2、创建新节点:" + seqZNode); Thread.sleep(Long.MAX_VALUE); }}
节点数据操作
节点的数据操作有设置、取得等基本功能。
1、 取得节点数据:
在ZooKeeper 客户端里面可以使用“get”命令取得节点的内容,那么对于程序而言,则可以使用如下的方法取得节点的数据:
· 取得数据:public byte[] getData(String path, boolean watch, Stat stat) throws KeeperException,InterruptedException;
|- “String path”:设置要取得数据的节点名称;
|- “boolean watch”:表示的是是否需要进行监听;
|- “Stat stat”:取得节点状态信息;
public class ZooKeeperGetData { private static final String CONNECT_HOSTS = "ZooKeeper主机IP,ZooKeeper主机IP....(,隔开):2181" ; public static void main(String[] args) throws Exception { ZooKeeper zkClient = new ZooKeeper(CONNECT_HOSTS, 2000, new Watcher(){ @Override public void process(WatchedEvent event) { // 此处的方法体暂时为空 }}) ; Stat stat = new Stat() ; String data = new String(zkClient.getData("/java", true, stat)) ; System.out.println(data); System.out.println(stat); }}
2、 判断数据节点是否存在
正常来讲当节点存在的时候才可以通过节点取得相应的数据,所以如果要想判断节点是否存在可以使用以下方法:
· 判断:public Stat exists(String path, boolean watch) throws KeeperException, InterruptedException;
|- 该判断方法返回的是一个Stat 对象,如果有节点则不为null;
public class ZooKeeperExists { private static final String CONNECT_HOSTS = "ZooKeeper主机IP,ZooKeeper主机IP....(,隔开):2181" ; public static void main(String[] args) throws Exception { ZooKeeper zkClient = new ZooKeeper(CONNECT_HOSTS, 2000, new Watcher(){ @Override public void process(WatchedEvent event) { // 此处的方法体暂时为空 }}) ; Stat stat = zkClient.exists("/java", true) ; if (stat != null) { // 当前节点存在 String data = new String(zkClient.getData("/java", true, stat)) ; System.out.println(data); } }}
3、 修改节点数据:
在ZooKeeper 客户端里面如果要修改节点的数据使用的set 命令完成,现在可以使用如下方法完成:
· 方法:public Stat setData(String path, byte[] data, int version) throws KeeperException,InterruptedException;
public class ZooKeeperSetData { private static final String CONNECT_HOSTS = "ZooKeeper主机IP,ZooKeeper主机IP....(,隔开):2181" ; public static void main(String[] args) throws Exception { ZooKeeper zkClient = new ZooKeeper(CONNECT_HOSTS, 2000, new Watcher(){ @Override public void process(WatchedEvent event) { // 此处的方法体暂时为空 }}) ; Stat stat = zkClient.setData("/java", "hadoop".getBytes(), 0) ; // 设置数据 System.out.println(stat); }}
4、 删除节点
如果要删除节点,使用方法:public void delete(String path, int version) throws InterruptedException, KeeperException;
public class ZooKeeperDelete { private static final String CONNECT_HOSTS = "ZooKeeper主机IP,ZooKeeper主机IP....(,隔开):2181" ; public static void main(String[] args) throws Exception { ZooKeeper zkClient = new ZooKeeper(CONNECT_HOSTS, 2000, new Watcher(){ @Override public void process(WatchedEvent event) { // 此处的方法体暂时为空 }}) ; if (zkClient.exists("/java", true) != null) { // 节点存在 zkClient.delete("/java", -1); } }}
- Java操作ZooKeeper(B)
- java 操作 zookeeper API
- Java操作ZooKeeper对象
- java简单操作zookeeper
- JAVA远程操作Zookeeper示例
- java 操作zookeeper 查看状态
- windows下java操作zookeeper
- JAVA远程操作Zookeeper示例
- 使用java api操作zookeeper
- Zookeeper集群Java操作(zookeeper3.4.5)
- Zookeeper 命令行操作及Java api
- Zookeeper(五)Java客户端节点操作
- zookeeper的java操作方式详解
- Java curator操作zookeeper获取kafka
- 使用Java客户端API操作Zookeeper
- 集群之 -- zookeeper -JAVA小例子bean操作
- 集群之 -- zookeeper -JAVA小例子 节点的操作
- Zookeeper学习之源生API的使用(java与shell操作zookeeper)。
- 1754. 逃离洞穴
- guava之Strings和Johner工具类使用示例
- JS encodeURI转码
- 字符串大小总结sizeof和strlen
- 1019
- Java操作ZooKeeper(B)
- myql5.6.34源码编译安装
- RunTime之Method Swizzling
- xcodeproj cannot be opened because the project file cannot be parsed
- [NOIP模拟题][位运算][建模][并查集]
- reeuests请求的超时时间和异常处理
- PMI2016大会最全资料集合
- 前端跨域解决
- Ubuntu下的无线网络配置