zk有四种节点类型:

持久节点,持久顺序节点,临时节点,临时顺序节点。

自定义监听事件时,在节点的创建,修改,删除的方法第一行都需要加入是否监听的一个方法:

//开启监听的方法。第二个参数表示是否开启监听
zk.exists(path, true);

zk自定义监听:

package com.kf.zkDemo;

import java.io.IOException;
import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
/**
* 自定义zk的事件通知
* @author kf
*
*/
public class MyWatch implements Watcher{
//定义链接地址
private static String ADDRESS = "127.0.0.1:2181";
//超时时间
private static int TIMEOUT = 2000; ZooKeeper zk;
//阻塞用户线程,用户必须等待连接成功
private CountDownLatch countDownLatch = new CountDownLatch(1); public void createZkConnection(String address, int timeout){
//第三个参数是事件通知。这里用的是本类,自定义的事件通知
try {
zk = new ZooKeeper(address, timeout, this);
countDownLatch.countDown();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 创建节点内容
* @param path
* @param data
* @return
*/
public boolean createNode(String path, String data){
//第三个参数表示权限的,这里开放所有权限,不限制服务器
//第四个参数表示节点的类型。用的持久节点
try {
//开启监听的方法。第二个参数表示是否开启监听
zk.exists(path, true);
String result = zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("创建节点成功!节点为:"+path+",值为:"+data);
System.out.println("创建结果为:"+result);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 修改节点内容
* @param path
* @param data
* @return
*/
public boolean updateNode(String path, String data){
//第三个参数表示权限的,这里开放所有权限,不限制服务器
//第四个参数表示节点的类型。用的持久节点
try {
//开启监听的方法。第二个参数表示是否开启监听
zk.exists(path, true);
//第三个参数表示版本号。 zk的数据版本默认从0开始,每次修改都会加1. -1严格来说属于不合法的版本号。表示从最新版本进行更新
Stat result = zk.setData(path, data.getBytes(), -1);
System.out.println("修改节点成功!节点为:"+path+",修改后为值为:"+data);
System.out.println("修改节点成功,result:"+result);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} public boolean deleteNode(String path){
//第二个参数表示版本号
try {
//开启监听的方法。第二个参数表示是否开启监听
zk.exists(path, true);
//第二个参数表示版本号。 zk的数据版本默认从0开始,每次修改都会加1. -1严格来说属于不合法的版本号。表示从最新版本进行更新
zk.delete(path, -1);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} public void process(WatchedEvent event) {
System.out.println("事件通知开始前");
//事件路径
String path = event.getPath();
//事件状态 即 连接不连接
KeeperState state = event.getState();
//事件类型
EventType type = event.getType();
System.out.println("事件路径"+path+",事件状态"+state+",事件类型"+type);
if(KeeperState.SyncConnected == state){
//事件类型 None表示是连接类型
if(EventType.None == type){
System.out.println("连接类型");
//连接上zk服务器后放开信号量
countDownLatch.countDown();
System.out.println("=====ZK连接成功=====");
}else if(EventType.NodeCreated == type){
System.out.println("=====新增节点成功=====path:"+path);
}else if(EventType.NodeDataChanged == type){
System.out.println("=====修改节点成功=====path:"+path);
}else if(EventType.NodeDeleted == type){
System.out.println("=====删除节点成功=====path:"+path);
}
}
System.out.println("事件通知开始后");
} public static void main(String[] args) {
MyWatch w = new MyWatch();
w.createZkConnection(ADDRESS, TIMEOUT);
//w.createNode("/zk01", "zk01-value");
//w.updateNode("/zk01", "zk01-value2");
w.deleteNode("/zk01");
} }

初学zookeeper--自定义事件监听的更多相关文章

  1. [问题贴]mui.openWindow+自定义事件监听操作让alert()执行两次

    仔细看,Alert函数执行了两次 共两个页面:index.html和detail.html, detail.html为按钮设置了自定义事件监听(newsId),触发alert. 在index.html ...

  2. Zookeeper Curator 事件监听 - 秒懂

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

  3. Java Spring 自定义事件监听

    ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...

  4. cocos2d-js 自定义事件监听派发

    熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法. cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManag ...

  5. JAVA自定义事件监听完整例子---sunfruit[转]

    http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733628a854d2c90c05f9313071601 ...

  6. Spring Boot实践——事件监听

    借鉴:https://blog.csdn.net/Harry_ZH_Wang/article/details/79691994 https://blog.csdn.net/ignorewho/arti ...

  7. SpringBoot框架(6)--事件监听

    一.场景:类与类之间的消息通信,例如创建一个对象前后做拦截,日志等等相应的事件处理. 二.事件监听步骤 (1)自定义事件继承ApplicationEvent抽象类 (2)自定义事件监听器,一般实现Ap ...

  8. 关于实现自定义Dialog和实现Dialog里view的事件监听的两种方法

    一.自定义dialog. 二.实现dialog里view的事件监听 1.自定义dialog比较简单.在实例化new的时候,加入样式,布局就行了.或者重写dialog. 2.实现dialog里view的 ...

  9. [置顶] flex4事件监听与自定义事件分发(三)

    1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...

随机推荐

  1. Mac 上安装python3

    1.安装包管理器 去包管理器官网按照提示安装包管理器 Homebrew 2.安装python3 安装完Homebrew ,输入指令安装python3 brew install python3 3.安装 ...

  2. 爬虫开发9.scrapy框架之递归解析和post请求

    今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久 ...

  3. [ActionScript 3.0] AS利用ByteArray向PHP发送二进制数据生成图片

    flash as3向php发送二进制数据,通过php保存成图片. AS端: package { import com.JPEGEncoder.JPGEncoder; import flash.disp ...

  4. 网络CCNA基础了解

    关于网络 CCNA.CCNP.CCIE 中的 CCNA 一.逻辑与.或.非 AND --> "与"计算 1 AND 1 = 1(取严) 1 AND 0 = 0 0 AND 1 ...

  5. P2319 [HNOI2006]超级英雄 题解

    [HNOI2006]超级英雄 题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目, ...

  6. POJ-3126-Prime Path(BFS)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27852   Accepted: 15204 Desc ...

  7. 题目1016:火星A+B(字符串拆分)

    问题来源 http://ac.jobdu.com/problem.php?pid=1016 问题描述 每次输入两个数,不同数位之间用逗号隔开,其中,第n位的进制就是第n个素数,即个位数是2进制的,十位 ...

  8. 海思hi35xx 开发学习(3):视频输入

    视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVDS 接口和 HISPI 接口),SLVS-EC,BT.1120,BT.656,BT.601,DC 等接口接收视频数据.V ...

  9. Linux命令-关机命令:shutdown

    shutdown -h now 现在马上关机 shutdown -h : 晚上8:30定时关机shutdown -r now 现在马上重起shutdown -r 20:30 晚上8:30定时重起 ca ...

  10. 主流服务器虚拟化技术简单使用——KVM(一)

    Tips:因为博客园排版的原因,图片显示不清晰,可以放大网页查看清晰图片. 如果系统使用物理机,需要在BIOS里面开启Intel VT-x(或AMD-V),如果是VMware workstation, ...