ZkClient
a zookeeper client, that makes life a little easier.
地址:
相关的内容: 、
代码案例:
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.7.0</version>
</dependency>
<!-- com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
package com.what21.zookeeper.zkclient;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;
/**
* 创建会话
*/public class CreateSession {
static final String CONNECT_ADDR = "192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181";
static final int SESSION_TIMEOUT = 5000;
public static void main(String[] args) {
// zkClient通过对zookeeperAPI内部包装,将这个异步的会话创建过程同步化了
ZkConnection zkConnection = new ZkConnection(CONNECT_ADDR);
ZkClient zkClient = new ZkClient(zkConnection, SESSION_TIMEOUT);
System.out.println("会话被创建了....");
}
}
package com.what21.zookeeper.zkclient;
import org.I0Itec.zkclient.ZkClient;
/**
* 创建节点
*/public class CreateZNode {
static final String CONNECT_ADDR = "192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181";
public static void main(String[] args) {
/*
创建⼀个zkClient实例来进⾏连接
注意:zkClient通过对zookeeperAPI内部包装,将这个异步的会话创建过程同步化了
*/ ZkClient zkClient = new ZkClient(CONNECT_ADDR);
System.out.println("会话被创建了....");
//createParents的值设置为true,可以递归创建节点
zkClient.createPersistent("/xfd-zkClient/c1",true);
System.out.println("success create znode.");
}
}
package com.what21.zookeeper.zkclient;
import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import java.util.List;
/**
* 获取节点
*/public class GetZnode {
static final String CONNECT_ADDR = "192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181";
public static void main(String[] args) throws InterruptedException {
/*
创建⼀个zkClient实例来进⾏连接
注意:zkClient通过对zookeeperAPI内部包装,将这个异步的会话创建过程同步化了
*/ ZkClient zkClient = new ZkClient(CONNECT_ADDR);
System.out.println("会话被创建了....");
List<String> children = zkClient.getChildren("/xfd-zkClient");
System.out.println(children);
/**
* 注册监听事件,客户端可以对不存在的节点进行子节点变更的监听
* 只要该节点的子节点列表发生变化或该节点被创建、被删除,都会触发监听
*/ zkClient.subscribeChildChanges("/xfd-zkClient-get", new IZkChildListener() {
/**
* @param s parentPath
* @param list 子节点列表
* @throws Exception
*/ @Override
public void handleChildChange(String s, List<String> list) throws Exception {
System.out.println(s + " 's child changed, currentChilds:" + list);
}
});
zkClient.createPersistent("/xfd-zkClient-get");
Thread.sleep(1000);
zkClient.createPersistent("/xfd-zkClient-get/c1");
Thread.sleep(1000);
zkClient.delete("/xfd-zkClient-get/c1");
Thread.sleep(1000);
zkClient.delete("/xfd-zkClient-get");
Thread.sleep(Integer.MAX_VALUE);
}
}
package com.what21.zookeeper.zkclient;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
/**
* 节点数据操作
*/public class ZnodeDataOperate {
static final String CONNECT_ADDR = "192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181";
public static void main(String[] args) throws InterruptedException {
/*
创建⼀个zkClient实例来进⾏连接
注意:zkClient通过对zookeeperAPI内部包装,将这个异步的会话创建过程同步化了
*/ ZkClient zkClient = new ZkClient(CONNECT_ADDR);
System.out.println("会话被创建了....");
String path = "/xfd-zkClient-Ep";
// 判断节点是否存在
boolean exists = zkClient.exists(path);
if (!exists) {
// 创建临时节点
zkClient.createEphemeral(path, "123");
}
// 注册监听
zkClient.subscribeDataChanges(path, new IZkDataListener() {
/**
* d当节点数据内容发生改变时,执行的回调方法
* @param s path
* @param o 变化后的节点内容
* @throws Exception
*/ @Override
public void handleDataChange(String s, Object o) throws Exception {
System.out.println(path + "该节点内容被更新,更新后的内容" + o);
}
/**
* 当节点被删除时会执行的回调方法
* @param s path
* @throws Exception
*/ @Override
public void handleDataDeleted(String s) throws Exception {
System.out.println(s + " 该节点被删除");
}
});
//获取节点内容
Object o = zkClient.readData(path);
System.out.println(o);
//更新
zkClient.writeData(path, "4567");
Thread.sleep(1000);
//删除
zkClient.delete(path);
Thread.sleep(1000);
}
}
package com.what21.zookeeper.zkclient;
import org.I0Itec.zkclient.ZkClient;
/**
* 删除节点
*/public class DeleteZNode {
static final String CONNECT_ADDR = "192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181";
public static void main(String[] args) {
/*
创建⼀个zkClient实例来进⾏连接
注意:zkClient通过对zookeeperAPI内部包装,将这个异步的会话创建过程同步化了
*/ ZkClient zkClient = new ZkClient(CONNECT_ADDR);
System.out.println("会话被创建了....");
// 在删除该节点时,会先删除其所有子节点再删除父节点(它自己),递归删除。此处删除了c1及c11
String path = "/xfd-zkClient/c1";
zkClient.createPersistent(path + "/c11");
zkClient.deleteRecursive(path);
System.out.println("success delete znode.");
}
}