一、基本介绍
1 、PERSISTENT (0, false, false),
持久节点:节点创建后,会一直存在,不会因客户端会话失效而删除;
2、PERSISTENT_SEQUENTIAL (2, false, true),
持久顺序节点:基本特性与持久节点一致,创建节点的过程中,zookeeper会在其名字后自动追加一个单调增长的数字后缀,作为新的节点名;
3、EPHEMERAL (1, true, false),
临时节点:客户端会话失效或连接关闭后,该节点会被自动删除,且不能再临时节点下面创建子节点,否则报如下错(org.apache.zookeeper.KeeperException$NoChildrenForEphemeralsException: KeeperErrorCode = NoChildrenForEphemerals for /node/child);
4、EPHEMERAL_SEQUENTIAL (3, true, true);
临时顺序节点:基本特性与临时节点一致,创建节点的过程中,zookeeper会在其名字后自动追加一个单调增长的数字后缀,作为新的节点名;
二、JavaApi的操作
1)maven引入
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.12</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
2)Java基本节点的操作
public class ZkClientOperator { /** zookeeper地址 */ static final String CONNECT_ADDR = "192.168.112.131:2181"; /** session超时时间 */ static final int SESSION_OUTTIME = 10000;//ms /** * 主要测试增加 临时节点、持久化节点,以及读取内容,删除节点操作 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //ZkClient zkc = new ZkClient(new ZkConnection(CONNECT_ADDR), SESSION_OUTTIME); ZkClient zkc = new ZkClient(CONNECT_ADDR, SESSION_OUTTIME); //1. create and delete方法 zkc.createEphemeral("/temp"); zkc.createPersistent("/super/c1", true); Thread.sleep(10000); zkc.delete("/temp"); zkc.deleteRecursive("/super"); //2. 设置path和data 并且读取子节点和每个节点的内容 zkc.createPersistent("/super", "1234"); zkc.createPersistent("/super/c1", "c1内容"); zkc.createPersistent("/super/c2", "c2内容"); List<String> list = zkc.getChildren("/super"); for(String p : list){ System.out.println(p); String rp = "/super/" + p; String data = zkc.readData(rp); System.out.println("节点为:" + rp + ",内容为: " + data); } //3. 更新和判断节点是否存在 zkc.writeData("/super/c1", "新内容"); System.out.println(zkc.readData("/super/c1").toString()); System.out.println(zkc.exists("/super/c1")); // 4.递归删除/super内容 zkc.deleteRecursive("/super"); } }