zookeeper-JAVA-API调用

一、
导入 JAR包
解压zookeeper安装包
lib 目录下的面的JAR+zookeeper.jar
新建 zookeeper的JAVA工程
新建 lib 文件夹,复制JAR包至lib文件夹中
全选 JAR,右键 --> build path --> add

二、


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;

public class ZkDemo {

/**
* @param args
* @throws IOException
* @throws InterruptedException
* @throws KeeperException
*/
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

// 内部类调用外部类的变量,变量需为 final
final CountDownLatch count = new CountDownLatch(1);
// 1.创建会话
String connectString = "192.168.76.131:2181,192.168.76.134:2181,192.168.76.132:2181" ;
final ZooKeeper zookeeper = new ZooKeeper(connectString, 5000, new Watcher() {

public void process(WatchedEvent event) {
// 确保连接状态成功
// 方法:使用 countDownLatch
if(event.getState() == KeeperState.SyncConnected){
count.countDown();
}
}
});
// 由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞
count.await();

// 2.
// 创建节点:同步方式,会发生阻塞,只有创建成功之后,程序才会执行下去
// String create = zookeeper.create("/park", "abcd".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// System.out.println(create);
// 返回创建节点信息

// 创建节点:异步方式,程序不阻塞,但执行完毕后,不保证节点创建成功
// zookeeper.create("/park2", "abcd".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new StringCallback() {
//
// public void processResult(int rc, String path, Object ctx, String name) {
// System.out.println("创建完毕:节点名称:"+name);
// }
// }, null);
// while(true){
// 什么都不做;添加原因是:异步创建节点,只有SYSO执行后才是创建成功,
// 因为是异步执行,所以程序会继续执行下去,但因为下面无代码可执行了,程序结束了
// 所以SYSO无输出,但节点已创建完毕
// }

// 3.删除
// 同步方法:version:-1 匹配任务版本
// zookeeper.delete("/park2", -1);
// 异步方法:
// zookeeper.delete("/park", -1, new VoidCallback() {
//
// public void processResult(int rc, String path, Object ctx) {
// System.out.println("删除完毕:路径名称:"+path);
// }
// }, null);
// while(true){}

// 4.读取-子节点
// List<String> children = zookeeper.getChildren("/", new Watcher() {
//
// public void process(WatchedEvent event) {
// if(event.getType() == EventType.NodeChildrenChanged){
// try {
// // 运行;在虚拟机中执行 zkCli.sh create /park
// // 节点发生变化,控制台打印输出当前所有节点
// // 只能监控一次变化,再次创建则无效
// List<String> list = zookeeper.getChildren("/", false);
// for(String s : list){
// System.out.println(s);
// }
// } catch (KeeperException e) {
// e.printStackTrace();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// }
// });
// for(String s : children){
// System.out.println(s);
// }
// while(true){
//
// }


}

}


多次变化,均可监控到
create /aaa xxx
create /bbb xxx
delete /aaa


import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.AsyncCallback.DataCallback;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

public class ZkDemo1 {

private static ZooKeeper zookeeper = null ;

public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

final CountDownLatch count = new CountDownLatch(1);
String connectString = "192.168.76.131:2181,192.168.76.134:2181,192.168.76.132:2181" ;
zookeeper = new ZooKeeper(connectString, 5000, new Watcher() {

public void process(WatchedEvent event) {
if(event.getState() == KeeperState.SyncConnected){
count.countDown();
}

// 5.获取节点数据,当数据发生变化时
if(event.getType() == EventType.NodeDataChanged){
String path = event.getPath();
System.out.println(path+"节点数据发生变化");
try {
byte[] datas = zookeeper.getData(path, true, null);
System.out.println("变化后的数据:"+new String(datas));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

// 7.节点创建或删除时打印
if(event.getType() == EventType.NodeCreated ||
event.getType() == EventType.NodeDeleted){
String path = event.getPath();
try {
Stat stat = zookeeper.exists(path, true);
System.out.println(stat);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
count.await();
// 4.获取 childrenNode
// List<String > list = zookeeper.getChildren("/", new ChildrenWatcher());
// for(String s : list){
// System.out.println(s);
// }

// 5.获取节点数据
// 同步
byte[] datas = zookeeper.getData("/poi", true, null);
System.out.println(new String(datas));

// 异步
zookeeper.getData("/park", true, new DataCallback() {

public void processResult(int rc, String path, Object ctx, byte[] data,
Stat stat) {
System.out.println(new String(data));
}
}, null);

// 6.更新数据
zookeeper.setData("/poi", "2222222".getBytes(), -1);
zookeeper.setData("/park", "33333333".getBytes(), -1, new StatCallback() {

public void processResult(int rc, String path, Object ctx, Stat stat) {
System.out.println("path:"+path+"stat:"+stat);
}
}, null);

// 7.节点是否存在
Stat exist = zookeeper.exists("/parkx", true);
System.out.println(exist);
while(true){}
}

static class ChildrenWatcher implements Watcher{

public void process(WatchedEvent event) {

if(event.getType() == EventType.NodeChildrenChanged){

List<String> childrenList = null ;
try {
// 后续的数据变更,有 Watcher 进行监控输出
childrenList = zookeeper.getChildren("/", new ChildrenWatcher());
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
for(String s : childrenList){
System.out.println(s);
}
}
}

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值