zookeeper监控znode
来源:互联网 发布:家装三维设计软件 编辑:程序博客网 时间:2024/04/30 06:14
package zookeeper;
import java.util.List;
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.ZooKeeper;
/**
* 众所周知,ZooKeeper中的ZNode是树形结构, 现在我需要给/app1结点设置watcher,监听/app1下增减、删除和修改的结点,
* 并将相应的事件使用log4j记录到日志文件中。ZNode的变化可以直接通过event.getType来获取 使用zk.exists(PATH,
* wc);来为PATH结点设置watcher,所有结点都可以使用wc做watcher。
*
* @author 小明 2015.5.23
*/
public class WatchClient implements Runnable {
//
private List<String> nodeList;
private static final String path = "/app";
private static ZooKeeper zk;
public static void main(String[] args) throws Exception {
WatchClient client = new WatchClient();
Thread thread = new Thread(client);
thread.start();
}
public WatchClient() throws Exception {
zk = new ZooKeeper("192.168.1.97:2181", 99999, new Watcher() {
public void process(WatchedEvent event) {
System.out.println(event.getPath() + event.getType());
}
});
}
/**
* 设置watch线程
*/
public void run() {
Watcher watcher = new Watcher() {
public void process(WatchedEvent event) {
//System.out.println("__________");
// 结点数据改变前的节点列表
List<String> nodeListBefore = nodeList;
// 主结点的数据发生改变时
if (event.getType() == EventType.NodeDataChanged) {
System.out.println("Node data changed:" + event.getPath());
}
if (event.getType() == EventType.NodeDeleted) {
System.out.println("Node data deleted:" + event.getPath());
}
if (event.getType() == EventType.NodeCreated) {
System.out.println("Node data created:" + event.getPath());
}
// 获取跟新后的nodeList
try {
nodeList=zk.getChildren(event.getPath(), false);
} catch (KeeperException e) {
System.out.println(event.getPath()+" has no child, deleted.");
} catch (InterruptedException e) {
e.printStackTrace();
}
// 增加结点
List<String> nodeListNow = nodeList;
if (nodeListBefore.size() < nodeListNow.size()) {
for (String str : nodeListNow) {
if (!nodeListBefore.contains(str)) {
System.out.println("Node created:" + event.getPath() + "/" + str);
}
}
}
// 删除结点
if (nodeListBefore.size() > nodeListNow.size()) {
for (String str : nodeListNow) {
if (!nodeListBefore.contains(str)) {
System.out.println("Node deleted:" + event.getPath() + "/" + str);
}
}
}
}
};
/**
* 监控Path下的节点
*/
while (true) {
try {
zk.exists(path, watcher);// 所要监控的主结点
} catch (Exception e) {
}
try {
nodeList = zk.getChildren(path, watcher);
} catch (Exception e) {
e.printStackTrace();
}
// 对path下每一个结点都设置一个watcher
for (String nodeName : nodeList) {
try {
zk.exists(path + "/" + nodeName, watcher);
} catch (Exception e) {
e.printStackTrace();
}
}
try {
//System.out.println("hhhh");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
import java.util.List;
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.ZooKeeper;
/**
* 众所周知,ZooKeeper中的ZNode是树形结构, 现在我需要给/app1结点设置watcher,监听/app1下增减、删除和修改的结点,
* 并将相应的事件使用log4j记录到日志文件中。ZNode的变化可以直接通过event.getType来获取 使用zk.exists(PATH,
* wc);来为PATH结点设置watcher,所有结点都可以使用wc做watcher。
*
* @author 小明 2015.5.23
*/
public class WatchClient implements Runnable {
//
private List<String> nodeList;
private static final String path = "/app";
private static ZooKeeper zk;
public static void main(String[] args) throws Exception {
WatchClient client = new WatchClient();
Thread thread = new Thread(client);
thread.start();
}
public WatchClient() throws Exception {
zk = new ZooKeeper("192.168.1.97:2181", 99999, new Watcher() {
public void process(WatchedEvent event) {
System.out.println(event.getPath() + event.getType());
}
});
}
/**
* 设置watch线程
*/
public void run() {
Watcher watcher = new Watcher() {
public void process(WatchedEvent event) {
//System.out.println("__________");
// 结点数据改变前的节点列表
List<String> nodeListBefore = nodeList;
// 主结点的数据发生改变时
if (event.getType() == EventType.NodeDataChanged) {
System.out.println("Node data changed:" + event.getPath());
}
if (event.getType() == EventType.NodeDeleted) {
System.out.println("Node data deleted:" + event.getPath());
}
if (event.getType() == EventType.NodeCreated) {
System.out.println("Node data created:" + event.getPath());
}
// 获取跟新后的nodeList
try {
nodeList=zk.getChildren(event.getPath(), false);
} catch (KeeperException e) {
System.out.println(event.getPath()+" has no child, deleted.");
} catch (InterruptedException e) {
e.printStackTrace();
}
// 增加结点
List<String> nodeListNow = nodeList;
if (nodeListBefore.size() < nodeListNow.size()) {
for (String str : nodeListNow) {
if (!nodeListBefore.contains(str)) {
System.out.println("Node created:" + event.getPath() + "/" + str);
}
}
}
// 删除结点
if (nodeListBefore.size() > nodeListNow.size()) {
for (String str : nodeListNow) {
if (!nodeListBefore.contains(str)) {
System.out.println("Node deleted:" + event.getPath() + "/" + str);
}
}
}
}
};
/**
* 监控Path下的节点
*/
while (true) {
try {
zk.exists(path, watcher);// 所要监控的主结点
} catch (Exception e) {
}
try {
nodeList = zk.getChildren(path, watcher);
} catch (Exception e) {
e.printStackTrace();
}
// 对path下每一个结点都设置一个watcher
for (String nodeName : nodeList) {
try {
zk.exists(path + "/" + nodeName, watcher);
} catch (Exception e) {
e.printStackTrace();
}
}
try {
//System.out.println("hhhh");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
0 0
- zookeeper监控znode
- ZooKeeper源码解析(三):Watcher如何监控ZNode
- zookeeper api 操作znode
- Zookeeper节点Znode
- Zookeeper的节点znode
- ZooKeeper的Znode剖析
- zookeeper 之znode 节点
- ZooKeeper的Znode剖析
- [ZooKeeper]znode的stat数据结构
- zookeeper数据结构及Znode类型
- 【Apache ZooKeeper】为ZNode设置watcher
- 使用ZooKeeper ACL特性进行znode控制
- zookeeper递归删除znode节点java Demo
- Zookeeper应用场景及Znode容量问题
- 利用ZooKeeper的Java API来创建一个znode
- ZooKeeper的名字空间节点(有关znode的一切)
- Zookeeper.NET Client(三)【Znode节点增删改查】
- Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)
- 迷宫问题 C语言实现(深搜)
- [Codeforces546D]Soldier and Number Game[dp][实现][素数筛][分解整数][数学]
- ACM/ICPC Java高精度计算 转载自CSDN老船长 http://blog.csdn.net/guo_love_peng/article/details/6634150
- iOS 开发中必不可少的一些工具
- poj 2631 Roads in the North(裸树的直径)
- zookeeper监控znode
- Javascript Dom 编程艺术
- BAE 百度开发经验谈
- java反射详解
- LeetCode的medium题集合(C++实现)十一
- linux 网络编程 -组播通信
- 网站收集
- C++细节学习之高效的位运算
- javascript dom 编程艺术 CSS DOM