一、监听某一节点内容

/**
* @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. v-html里面添加样式

    项目中,使用V-html渲染的页面,要添加样式,改如何做 解决方案1:在updated生命周期函数中,js动态配置样式,代码如下: updated() { $('.msgHtmlBox').find( ...

  2. vue-fetch

    1.安装命令“ cnpm install --save isomorphic-fetch es6-promise 2.由于ie不支持Promise,所以需要安装promise-polyfill; cn ...

  3. 使用WebBrowser控件播放Flash网页相关问题解决方法(转)

    就是写一个类继承WebBrower控件,重写 protected   override   void   WndProc(ref   System.Windows.Forms.Message   m) ...

  4. springboot第一个项目【mybatis】

    1.resources下添加spring 添加spring-context.xml,设置controller的路径,以及引入数据库配置 <beans xmlns="http://www ...

  5. Confluence 6 手动安装语言包和找到更多语言包

    手动安装语言包 希望以手动的方式按照语言包,你需要按照下面描述的方式上传语言包.一旦你安装成功后,语言包插件将会默认启用. 插件通常以 JAR 或者 OBR(OSGi Bundle Repositor ...

  6. pod 使用详解

    cd 进去到 项目目录 包含 xcodeproj 结尾的目录下 1 pod init 创建一个pod 文件 2 打开生产的pod 文件 然后 配置pod 文件 并保存  3 pod install 安 ...

  7. python网络爬虫笔记(一)

    一.查询数据字典型数据 1.先说说dictionary查找和插入的速度极快,不会随着key的增加减慢速度,但是占用的内存大 2.list查找和插入的时间随着元素的增加而增加,但还是占用的空间小,内存浪 ...

  8. Spring 整合 Quartz 实现动态定时任务

    复制自:https://www.2cto.com/kf/201605/504659.html 最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能 ...

  9. 80端口被占用 导致apach无法启动问题

    1.查找是哪个程序占用了80端口 netstat -ano 列出所有进程 观察 “本地地址” 列 找到对应的PID 我这里是4 简单的办法,打开任务管理器,查看PID是4的 是哪个进程. 发现是Sys ...

  10. IDEA窗口重置