一、监听某一节点内容

/**
* @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. 洛谷P4707 重返现世 [DP,min-max容斥]

    传送门 前置知识 做这题前,您需要认识这个式子: \[ kthmax(S)=\sum_{\varnothing\neq T\subseteq S}{|T|-1\choose k-1} (-1)^{|T ...

  2. wet 下载jdk 64位

    wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com% ...

  3. 解决Javascript中$(window).resize()多次执行(转)

    https://www.cnblogs.com/shuilangyizu/p/6816756.html 有些时候,我们需要在浏览器窗口发生变化的时候,动态的执行一些操作,比如做自适应页面时的适配.这个 ...

  4. Windows Server 2016 + SCO 2016 安装及配置介绍

    Windows Server 2016 + SCO 2016 安装及配置介绍 高文龙关注1人评论6332人阅读2017-02-26 23:23:02 Windows Server 2016 + SCO ...

  5. jdbctemplate 调用oracle 有返回(会话型临时表数据的)结果的存储过程

    注:本文为博主 原创. jdbctemplate 调用oracle存储过程 事务 临时表  有返回结果 1:java 代码 本逻辑代码本是想把 java 代码里的list<Strign>类 ...

  6. Confluence 6 新 Confluence 安装配置一个数据源连接

    如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...

  7. Confluence 6 Oracle 测试你的数据库连接

    在你的数据库设置界面,有一个 测试连接(Test connection)按钮可以检查: Confluence 可以连接你的数据库服务器 数据库的字符集编码是否正确 你的数据库用户是否具有需要的权限 你 ...

  8. Confluence 6 查看你的许可证细节

    希望查看你的 Confluence 许可证: 进入  > 基本配置(General Configuration). 在左侧的面板中选择 许可证详细(License Details). 你的许可证 ...

  9. 【Java】「深入理解Java虚拟机」学习笔记(2)- JVM内存区域

    一.运行时数据区 JVM在执行Java程序的时候,将其运行时数据区划分为若干不同区域.它们的用途和创建及销毁的时间不同. 1.程序计数器(Program Counter Register) 是一块很小 ...

  10. cf29d 深搜,dfs序

    #include<bits/stdc++.h> using namespace std; #define maxn 500 ]; int n,head[maxn],tot,a[maxn], ...