public class ZookeeperTest {
public static void main(String[] args) throws Exception {
// zookeeper连接
// testConnect();
// 创建节点
// testSyncCreate();
// 异步创建节点
// testAsyncCreate();
// 异步检查是否存在
// testAsyncExists();
// 异步获取数据
// testAsyncGetData();
// 异步删除
testAsyncDelete();
}
public static ZooKeeper getZookeeper() throws IOException {
return new ZooKeeper("localhost:2181", 5000, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println(String.format("事件内容:%s", watchedEvent));
}
});
}
/**
* zookeeper连接
*
* @throws Exception
*/
public static void testConnect() throws Exception {
//*****************************************************************************************************************************************************
// 1. 创建zookeeper连接: ZooKeeper(java.lang.String connectString, int sessionTimeout, org.apache.zookeeper.Watcher watcher)
//*****************************************************************************************************************************************************
ZooKeeper zooKeeper = getZookeeper();
System.out.println(zooKeeper.getState());
Thread.sleep(5000);
/*
CONNECTING
事件内容:WatchedEvent state:SyncConnected type:None path:null // 连接成功之后会触发
*/
}
/**
* 同步创建
*
* @throws Exception
*/
public static void testSyncCreate() throws Exception {
//*****************************************************************************************************************************************************
// 2.创建新节点 create(java.lang.String path, byte[] data, java.util.List<org.apache.zookeeper.data.ACL> acl, org.apache.zookeeper.CreateMode createMode)
//*****************************************************************************************************************************************************
// ------------------------关键属性描述---------------------
// acl:权限列表
// 提供默认的权限OPEN_ACL_UNSAFE、CREATOR_ALL_ACL、READ_ACL_UNSAFE
// OPEN_ACL_UNSAFE:完全开放
// CREATOR_ALL_ACL:创建该znode的连接拥有所有权限
// READ_ACL_UNSAFE:所有的客户端都可读
// createMode:节点类型
// PERSISTENT:持久化节点
// PERSISTENT_SEQUENTIAL:持久化有序节点
// EPHEMERAL:临时节点(连接断开自动删除)
// EPHEMERAL_SEQUENTIAL:临时有序节点(连接断开自动删除)
// ------------------------关键属性描述---------------------
ZooKeeper zooKeeper = getZookeeper();
String path = zooKeeper.create("/test", "test data".getBytes(), // 父节点一定要存在
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(String.format("path:%s", path));
Thread.sleep(5000);
/*
[zk: localhost:2181(CONNECTED) 6] get /test
test data
cZxid = 0xa
ctime = Mon Feb 18 11:12:23 CST 2019
mZxid = 0xa
mtime = Mon Feb 18 11:12:23 CST 2019
pZxid = 0xa
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
*/
}
/**
* 异步创建
*/
public static void testAsyncCreate() throws Exception {
ZooKeeper zooKeeper = getZookeeper();
zooKeeper.create("/test/a", "async data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT_SEQUENTIAL, new AsyncCallback.StringCallback() {
@Override
public void processResult(int i, String s, Object o, String s1) {
System.out.println("i=" + i);//创建成功返回0
System.out.println("s=" + s);//自定义节点名称
System.out.println("o=" + o);//自定义回调数据
System.out.println("s1=" + s1);//最终节点名称(顺序节点最终名称与自定义名称不同)
}
}, "testAsync");
Thread.sleep(5000);
/* 打印内容---》
事件内容:WatchedEvent state:SyncConnected type:None path:null
i=0
s=/test/a
o=testAsync
s1=/test/a0000000000
*/
}
/**
* 检查是不是存在某个节点(异步)
*/
public static void testAsyncExists() throws Exception {
ZooKeeper zooKeeper = getZookeeper();
zooKeeper.exists("/test", new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println(String.format("节点存在事件监听", watchedEvent));
}
}, new AsyncCallback.StatCallback() {
@Override
public void processResult(int i, String s, Object o, Stat stat) {
System.out.println("i=" + i);//成功返回0
System.out.println("s=" + s);//自定义节点名称
System.out.println("o=" + o);//自定义回调数据
System.out.println("stat=" + JSON.toJSONString(stat));// 节点状态
}
}, "exists context");
Thread.sleep(5000);
}
/**
* 获取数据(异步)
* @throws Exception
*/
public static void testAsyncGetData() throws Exception{
ZooKeeper zooKeeper = getZookeeper();
zooKeeper.getData("/test", new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println(String.format("getData事件监听", watchedEvent));
}
}, new AsyncCallback.DataCallback() {
@Override
public void processResult(int i, String s, Object o, byte[] bytes, Stat stat) {
System.out.println("i=" + i);//成功返回0
System.out.println("s=" + s);//自定义节点名称
System.out.println("o=" + o);//自定义回调数据
System.out.println(new String(bytes));//数据
System.out.println("stat=" + JSON.toJSONString(stat));//节点状态
}
},"getData context");
Thread.sleep(5000);
}
/**
* 测试删除节点(异步)
*/
public static void testAsyncDelete() throws Exception{
ZooKeeper zookeeper = getZookeeper();
// -1表示删除最新的节点
zookeeper.delete("/test/a0000000000", -1, new AsyncCallback.VoidCallback() {
@Override
public void processResult(int i, String s, Object o) {
System.out.println("i=" + i);//成功返回0
System.out.println("s=" + s);//自定义节点名称
System.out.println("o=" + o);//自定义回调数据
}
},"delete context");
Thread.sleep(5000);
}
}
zookeeper使用系列-zookeeper api使用
