一、监听某一节点内容

/**
* @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. Codeforces 1117G Recursive Queries [线段树]

    Codeforces 洛谷:咕咕咕 思路 设\(L_i,R_i\)为\(i\)左右第一个大于它的位置. 对于每一个询问\(l,r\),考虑区间每一个位置的贡献就是\(\min(r,R_i-1)-\ma ...

  2. Confluence 6 开始使用

    欢迎来到 Confluence 的开始使用指南文档.在这个稳定中,你将会找到有关对 Confluence 进行评估的指南和其他的一些有用的内容.当你开始使用 Confluence 的时候,这些信息能够 ...

  3. Confluence 6 使用 WebDAV 客户端来对页面进行操作

    下面的部分告诉你如何在不同的系统中来设置原生的 WebDAV 客户端,这个客户端通常显示在你操作系统的文件浏览器中,例如,Windows 的 Windows Explorer 或者 Linux 的 K ...

  4. 团队开发工具git常用命令

    Git 常用命令 Git配置 git config --global user.name "storm" git config --global user.email " ...

  5. Python交换a,b两个数值的三种方式

    # coding:utf-8 a = 1 b = 2 # 第一种方式 # t = a # 临时存放变量值 # a = b # b = t # 第二种方式 # a = a + b # a的值已经不是原始 ...

  6. mysql常见安全加固策略

    原创 2017年01月17日 21:36:50 标签: 数据库 / mysql / 安全加固 5760 常见Mysql配置文件:linux系统下是my.conf,windows环境下是my.ini: ...

  7. 论文阅读笔记二十二:End-to-End Instance Segmentation with Recurrent Attention(CVPR2017)

    论文源址:https://arxiv.org/abs/1605.09410 tensorflow 代码:https://github.com/renmengye/rec-attend-public 摘 ...

  8. 如何把网址配置为http和https可以同时访问

    1.打开iis7 ,找到具体站点 2.点击站点后右侧有个绑定按钮 3.点击绑定,增加https,设置端口,ssl选择 iis证书 4.找到ssl设置,要求证书不勾选,客户证书,忽略 5.如果右侧不显示 ...

  9. oracle创建用户和密码以及授权登录问题

    创建有户名和密码CREATE USER 用户名 IDENTIFIED BY 密码;分配权限GRANT connect,dba to 用户名; 1:使用oracle的命令行登录oracle的方式(安装好 ...

  10. [转] babel的使用

    一.配置文件.babelrc .babelrc 文件存放在项目的根目录下. { "presets": [], "plugins": [] } presets 字 ...