初学zookeeper--自定义事件监听
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--自定义事件监听的更多相关文章
- [问题贴]mui.openWindow+自定义事件监听操作让alert()执行两次
仔细看,Alert函数执行了两次 共两个页面:index.html和detail.html, detail.html为按钮设置了自定义事件监听(newsId),触发alert. 在index.html ...
- Zookeeper Curator 事件监听 - 秒懂
目录 写在前面 1.1. Curator 事件监听 1.1.1. Watcher 标准的事件处理器 1.1.2. NodeCache 节点缓存的监听 1.1.3. PathChildrenCache ...
- Java Spring 自定义事件监听
ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...
- cocos2d-js 自定义事件监听派发
熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法. cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManag ...
- JAVA自定义事件监听完整例子---sunfruit[转]
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733628a854d2c90c05f9313071601 ...
- Spring Boot实践——事件监听
借鉴:https://blog.csdn.net/Harry_ZH_Wang/article/details/79691994 https://blog.csdn.net/ignorewho/arti ...
- SpringBoot框架(6)--事件监听
一.场景:类与类之间的消息通信,例如创建一个对象前后做拦截,日志等等相应的事件处理. 二.事件监听步骤 (1)自定义事件继承ApplicationEvent抽象类 (2)自定义事件监听器,一般实现Ap ...
- 关于实现自定义Dialog和实现Dialog里view的事件监听的两种方法
一.自定义dialog. 二.实现dialog里view的事件监听 1.自定义dialog比较简单.在实例化new的时候,加入样式,布局就行了.或者重写dialog. 2.实现dialog里view的 ...
- [置顶] flex4事件监听与自定义事件分发(三)
1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...
随机推荐
- linux 安装python3.7 报错No module named '_ctypes'
ModuleNotFoundError: No module named '_ctypes' 操作系统:centos yum install libffi-devel ./configure --en ...
- S:List
描述 写一个程序完成以下命令:new id ——新建一个指定编号为id的序列(id<10000)add id num——向编号为id的序列加入整数nummerge id1 id2——合并序列id ...
- uC/OS-II 函数之邮箱管理相关函数
上文主要介绍了消息队列相关的函数,本文介绍邮箱管理相关的函数:OSMboxCreate()建立一个邮箱,OSMboxDel()删除一个邮箱,OSMboxPend()等待邮箱中的消息,OSMboxPos ...
- Opencv3.0: undefined reference to cv::imread(cv::String const&, int)
使用opencv,编译出错: undefined reference to cv::imread(cv::String const&, int) 自opencv3.0之后,图像读取相关代码在i ...
- Hacking Lambda Expressions in Java
Hacking Lambda Expressions in Javahttps://dzone.com/articles/hacking-lambda-expressions-in-java At t ...
- 2019.4.18 HTML + CSS相关整理
目录 标签 块标签 行标签 行块转化 嵌套规则 css引入方式 行间样式 内部引入 外部引入 选择器 基础选择器 组合选择器 盒模型 css样式 字体属性 设置字体的大小 设置字体的粗细 设置字体的风 ...
- flutter dup get
有很多 flutter library 中有两种导入方式 with dup: dup get 这种导入方式是需要依赖于 Dart SDK 下载 Dart SDK 地址:http://www.gekor ...
- Linux下配置redis,c#简单调用
redis比较流行的nosql库: 我这里测试本机window系统,虚拟机安装linux系统,linux系统部署redis,windwo系统,c#调用linux系统的redis 第一步:linux下安 ...
- Linux 构建ftp服务器
1.安装vsftpd服务器 $sudo apt-get install vsftpd 2.cd 到etc文件,配置vsftpd.conf文件 $sudo vi /etc/vsftpd.conf 修改至 ...
- selenium 之Ran 0 tests in 0.000s
from selenium import webdriverfrom time import ctime,sleepimport unittestclass TestLogin(unittest.Te ...