一、监听某一节点内容

/**
* @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. Oracle从入门到精通(详细) 明日科技

  2. LeetCode(95): 不同的二叉搜索树 II

    Medium! 题目描述: 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [   [1,null,3,2],   [3,2,null,1],   ...

  3. 【ssh】端口转发

    来源:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 非常非常好用,可以通过跳板解决两台服务器无法连接的问题 第一部分 概述 ...

  4. JSP 动作

    动作是第三种类型的语法元素,它们被转换成Java 代码来执行操作,如访问一个Java对象或调用方法. 一. useBean useBean将创建一个关联Java对象的脚本变量.这 是早期分离的表示层和 ...

  5. Android手机流量分析工具介绍

    一.20 Best Android Hacking Apps And Tools Of 2018 首先罗列常见的Android手机hacking的工具 #1The Android Network Ha ...

  6. 小学生都看得懂的C语言入门(2): 判别 循环的一些应用实例

    1.bool 类型 定义bool类型之前需要导入#include <stdbool.h> #include <stdio.h> #include <stdbool.h&g ...

  7. 20165314 2017-2018-2《Java程序设计》课程总结

    20165314 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...

  8. 使用Calendar获取上一月,下一月,上一年,下一年的当天日期

    Calendar的add(int field,int amount)方法 field 表示月或年,天等字段 amount 代表增量或减量 例如: 上月的当天日期  Calendar cal = Cal ...

  9. linux 压缩和解压缩

    压缩 tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.ta ...

  10. spring cloud feign覆写默认配置级feign client的日志打印

    一.覆写fegin的默认配置 1.新增配置类FeignConfiguration.java package com.config; import org.springframework.context ...