一、监听某一节点内容

/**
* @author: PrincessHug
* @date: 2019/2/25, 14:28
* @Blog: https://www.cnblogs.com/HelloBigTable/
* 监听一个节点内容的变化
*/
public class WatchZoneDemo {
ZooKeeper zkCli = null; public static void main(String[] args) throws IOException, InterruptedException {
WatchZoneDemo wz = new WatchZoneDemo();
wz.getConnection();
Thread.sleep(Long.MAX_VALUE);
} private void getConnection() throws IOException {
zkCli = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
public void process(WatchedEvent watchedEvent) {
try {
byte[] data = zkCli.getData("/Wyh", true, null);
System.out.println("监听类型为:" + watchedEvent.getType());
System.out.println("监听路径为:" + watchedEvent.getPath());
System.out.println("数据被修改为:" + new String(data));
System.out.println("=======================================");
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}

二、监听某节点目录的变化

/**
* @author: PrincessHug
* @date: 2019/2/25, 14:57
* @Blog: https://www.cnblogs.com/HelloBigTable/
* 监听一个节点的子节点的变化
*/
public class WatchChildrenDemo {
ZooKeeper zkCli = null; public static void main(String[] args) throws IOException, InterruptedException {
WatchChildrenDemo wc = new WatchChildrenDemo();
wc.getConnction();
Thread.sleep(Long.MAX_VALUE);
} private void getConnction() throws IOException {
zkCli = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
public void process(WatchedEvent watchedEvent) {
ArrayList<String> nodes = new ArrayList<String>();
try {
List<String> children = zkCli.getChildren("/", true);
for (String c:children){
nodes.add(c);
}
System.out.println(nodes);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}

三、Zookeeper当太上下线的感知系统

  1.需求:某分布式系统中,主节点有多台,可以进行动态上下限,当有任何一台机器发生了动态的上下线, 任何一台客户端都能感知得到

  2.思路:

    (1)创建客户端与服务端

    (2)启动client端 并监听

    (3)启动server端 并注册

    (4)当server端发生上下线

    (5)client端都能感知的到

  3.代码

public class ZKServer {
ZooKeeper zk = null;
private String parentNode = "/Servers"; public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
String childNode = "hd1-1";
ZKServer zkServer = new ZKServer();
//获取连接
zkServer.getConnection();
//注册信息
zkServer.regist(childNode);
//业务逻辑,提示上线
zkServer.build(childNode); } private void build(String hostname) throws InterruptedException {
System.out.println(hostname + "上线了!!");
Thread.sleep(Long.MAX_VALUE);
} private void regist(String hostname) throws KeeperException, InterruptedException {
String path = zk.create(parentNode + "/server", hostname.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println(path);
} private void getConnection() throws IOException {
zk = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
public void process(WatchedEvent watchedEvent) { }
});
}
} public class ZKClient {
ZooKeeper zk = null;
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
ZKClient zkClient = new ZKClient();
zkClient.getConnection();
zkClient.watching();
} private void watching() throws InterruptedException {
Thread.sleep(Long.MAX_VALUE);
} private void getConnection() throws IOException {
zk = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
public void process(WatchedEvent watchedEvent) {
try {
List<String> children = zk.getChildren("/Servers", true);
ArrayList<String> node = new ArrayList<String>();
for (String c:children){
byte[] data = zk.getData("/Servers/" + c, true, null);
node.add(new String(data));
}
System.out.println(node);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}

Zookeeper三个监听案例的更多相关文章

  1. Zookeeper Curator 事件监听 - 秒懂

    目录 写在前面 1.1. Curator 事件监听 1.1.1. Watcher 标准的事件处理器 1.1.2. NodeCache 节点缓存的监听 1.1.3. PathChildrenCache ...

  2. zookeeper如何永久监听

    转自:http://www.cnblogs.com/viviman/archive/2013/03/11/2954118.html 一 回调基础知识 znode 可以被监控,包括这个目录节点中存储的数 ...

  3. Zookeeper中Watcher监听实现增删改

    8.1 连接方法 package com.zookeeper.day01; import org.apache.zookeeper.*; import java.io.IOException; pub ...

  4. ZooKeeper 笔记(2) 监听数据变化

    ZK中的每个节点都可以存储一些轻量级的数据,这些数据的变化会同步到集群中的其它机器.在应用中程序员可以添加watcher来监听这些数据的变化,watcher只会触发一次,所以触发过后想要继续监听,必须 ...

  5. Httpd服务入门知识-Httpd服务常见配置案例之修改监听的IP和Port

    Httpd服务入门知识-Httpd服务常见配置案例之修改监听的IP和Port 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看默认配置 [root@node101.yinzh ...

  6. SpringBoot | 第三十二章:事件的发布和监听

    前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...

  7. Android四大组件之Activity一(组件的概念、Intent、监听)

    前言知识补充:  什么是组件?   1.它的类必须实现特定接口或继承特定类   2.需要在配置文件中配置其全类名   3.它的对象不是通过new来创建的, 而是系统自动创建的   4.它的对象具有一定 ...

  8. Spring之事件监听(观察者模型)

    目录 Spring事件监听 一.事件监听案例 1.事件类 2.事件监听类 3.事件发布者 4.配置文件中注册 5.测试 二.Spring中事件监听分析 1. Spring中事件监听的结构 2. 核心角 ...

  9. Android中Button的五种监听事件

    简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...

随机推荐

  1. 清北学堂 清北-Day5-R2-xor

    有 $ n $ 个物品,每个物品有两个属性 $ a_i,b_i $ ,挑选出若干物品,使得这些物品 $ a_i $ 的异或和 $ x \le m \(.问在这一限制下,\) b_i $ 的总和最大可能 ...

  2. 关于const修饰指针

    const修饰指针,一般分为如下四种情况: int b = 500; const int *a = &b;   //情况1 int const *a = &b //        2 ...

  3. 2018谷歌I/O开发者大会8大看点汇总 新品有哪些

    2018谷歌I/O开发者大会8大看点汇总 新品有哪些美国科技媒体The Verge近日撰文,列举了在即将召开的2018年谷歌I/O开发者大会上的8大看点,包括Android P.人工智能等等. 以下为 ...

  4. Glide高级详解—缓存与解码复用

    Glide 使用简明的流式语法API,大多数情况下,可能完成图片的设置你只需要:Glide.with(activity) .load(url) .into(imageView); 默认情况下,Glid ...

  5. 信息摘要算法之五:HMAC算法分析与实现

    MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也经常被称作HMAC算法. ...

  6. javaScript遍历对象、数组总结

        javaScript遍历对象总结 1.使用Object.keys()遍历 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性). var obj = {'0':'a ...

  7. python并发编程之多进程1-----------互斥锁与进程间的通信

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  8. bzoj 2190

    题意:求 题解:这题...数据范围是真小... 研究一下这一表达式,发现gcd(i,j)=1表示i,j互质,那么互质肯定能想到欧拉函数,可是欧拉函数要求j<i,那么我们变化一下:显然原矩阵是对称 ...

  9. document.getElementsByClassName() 原生方法 通过className 选择DOM节点

    <div id="box"> <div class="box">1</div> <div class="bo ...

  10. 阿里 Goldeneye 四个环节落地智能监控:预测、检测、报警及定位

    阿里 Goldeneye 四个环节落地智能监控:预测.检测.报警及定位 https://www.infoq.cn/article/alibaba-goldeneye-four-links