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. Tomcat企业级应用

    简介 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由 ...

  2. CentOS6.5更改语言设置

    yum grouplist |grep cn yum groupinstall “Chinese Support”——————————————yum groupinstall “Desktop”vi ...

  3. Java Builder 模式,你搞懂了么?

    加油.png 前言:最近闲来无事的时候想着看看一些平常用的三方库源码,没想到看了之后才知道直接撸源码好伤身体,一般设计优秀的开源库都会涉及很多的设计模式,就比如 android 开发使用频繁的 okH ...

  4. js实现checkbox全选,全部选和反选效果

    效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. Bad Smell (代码的坏味道)

    sourcemaking 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹.正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 "代码异味" ...

  6. 高阶篇:4.1.1)QFDI(客户需求转换为设计要求)

    本章目的:明确QFDI的作用:收集客户需求(Customer Needs),转换为设计要求(Design Feature).并介绍其制作方法. 1.QFDI质量屋举例 不用怀疑,现在大部分参考教材所谓 ...

  7. Vivado 的IP:Global 和 Out-Of-Context选项问题

    在Vivado定制IP的时候,或者在IP Catalog中双击一个IP,不论该IP是我们自己添加到工程的自定义IP,还是Vivado自己带的IP,选择"Customize IP"后 ...

  8. es xxx_by_query

    xxx_by_query包括_delete_by_query和_update_by_query,下面分开讲 _delete_by_query 相当于sql中的delete from a where . ...

  9. epoll_wait 返回值学习以及epoll使用学习

    https://blog.csdn.net/analogous_love/article/details/88721574

  10. jmeter安装部署、maven路径配置

    jmeter下载地址: https://jmeter.apache.org/download_jmeter.cgi 解压文件 配置jmeter环境变量 (1)设置jmeter解压目录的JMETER_H ...