ZkClient之创建节点。
ZkClient中提供了以下一系列接口来创建节点,开发者可以通过这些接口来进行各种类型的节点创建:
- String create(final String path, Object data, final CreateMode mode)
- String create(final String path, Object data, final List
acl, final CreateMode mode) - void create(final String path, Object data, final CreateMode mode, final AsyncCallback.StringCallback callback, final Object context)
- void createEphemeral(final String path)
- void createEphemeral(final String path, final Object data)
- void createPersistent(String path)
- void createPersistent(String path, boolean createParents)
- void createPersistent(String path, Object data)
- void createPersistent(String path, List
acl, Object data) - String createPersistentSequential(String path, Object data)
- String createEphemeralSequential(final String path, final Object data)
该API方法的参数说明如下表所示。
参数名 说明 path 指定数据节点的节点路径,即API调用的目的是创建该节点 data 节点的初始数据内容,可以传入null mode 节点类型,是一个枚举类型,通常有4种可选的节点类型 acl 节点的ACL策略 callback 注册一个异步回调函数 context 用于传递一个对象,可以在执行回调函数的时候使用 createParents 指定是否创建父节点
在ZkClient的创建节点API接口中,很多参数都和ZooKeeper原生的创建节点API接口比较相近。
ZkClient提供了较多的创建节点API接口,其中前面3个接口和ZooKeeper原生的创建节点API接口基本一致,唯一不同的地方在于,原生接口只允许传入byte[]类型的参数,而ZkClient提供的接口,由于支持了自定义序列化器,因此可以传入复杂对象作为参数。
再来看后面的几个接口,从接口的名字上就可以看出这些接口将节点的创建类型隐藏在了方法名中,如createEphemeral接口是创建临时节点,而createPersistentSequential接口则是创建持久顺序接口。
最后,我们再来看一个比较有趣的参数——createParents。ZooKeeper原生的API在创建节点时无法做到递归建立节点,也就是说只有在父节点存在的情况下才能够建立子节点。但是,在很多情况下,类似于“创建一个节点之前,首先还需要去检查其父节点是否存在,如果不存在,那么还要先创建父节点”的安全性处理对于很多开发人员来说,是相当繁琐的工作。好在ZkClient为我们解决了这个问题,通过createParents这个参数,ZkClient能够在内部帮助我们递归建立父节点。
使用ZkClient创建节点
// 使用ZkClient创建节点
public class Create_Node_Sample {
public static void main(String[] args) throws Exception {
ZkClient zkClient = new ZkClient(“domain1.book.zookeeper:2181”, 5000);
String path = “/zk-book/c1”;
zkClient.createPersistent(path, true);
}
}
在上面这个示例程序中,我们使用ZkClient的createPersistent接口创建节点,并且设置createParents参数为true,表明需要递归创建父节点。很显然,使用ZkClient省去了很多繁琐的工作。
另外,ZkClient的API中还提供了支持异步创建节点的方法,鉴于异步方式的使用和上文中讲解的非常类似,这里不再赘述。
还没有评论,来说两句吧...