zookeeper学习二
1.zookeeper的watches
1)可以理解为一个监听,ZooKeeper中的所有读取操作 - getData(),getChildren()和exists() - 都可以设置选择监视
2)watches的范围
创建事件,删除事件,更改事件,子事件
3)删除watches
我们可以通过调用removeWatches删除在znode上注册的手表
2.watches样例(java)
public class ZKDemo implements Watcher {
private static CountDownLatch countDownLatch = new CountDownLatch(1);
private static ZooKeeper zooKeeper;
public static void main(String[] args) throws Exception {
connetionZK("");
close();
}
public static void connetionZK(String zk) throws IOException, KeeperException, InterruptedException {
//zookeeper的ip:端口
String path = "192.168.10.150:2181";
zooKeeper = new ZooKeeper(path, 20*1000, new ZKDemo());
//创建节点并给值
// createZnode(zooKeeper, "/test", "test1".getBytes());
//子节点列表更改
// createZnodeChild(zooKeeper, "/test", "test2".getBytes());
//修改节点数据
// createZnodeAndChanged(zooKeeper, "/test", "test3".getBytes());
//创建并删除节点
// createZnodeAndDelete(zooKeeper, "/test", "test4".getBytes());
//数据节点下删除watch
// createZnodeAndRMDataWatch(zooKeeper, "/test", "test5".getBytes());
//子节点下删除watch
// createZnodeAndRMChildWatch(zooKeeper, "/test", "test6".getBytes());
countDownLatch.await();//阻塞程序继续执行
}
/**
* 创建节点并给值
* @param zooKeeper
* @param path
* @param data
*/
public static void createZnode(ZooKeeper zooKeeper,String path,byte [] data) {
//创建节点 路径,节点值,Watch,类型
try {
zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 子节点列表更改
* @param zooKeeper
* @param path
* @param data
*/
public static void createZnodeChild(ZooKeeper zooKeeper,String path,byte [] data) {
//创建节点 路径,节点值,Watch,类型
try {
zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
zooKeeper.getChildren(path, true);
zooKeeper.create(path+"/child1", "child".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 修改节点数据
* @param zooKeeper
* @param path
* @param data
*/
public static void createZnodeAndChanged(ZooKeeper zooKeeper,String path,byte [] data) {
//创建节点 路径,节点值,Watch,类型
try {
zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
zooKeeper.exists(path, true);
zooKeeper.setData(path, "Changed".getBytes(), -1);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 创建并删除节点
* @param zooKeeper
* @param path
* @param data
*/
public static void createZnodeAndDelete(ZooKeeper zooKeeper,String path,byte [] data) {
//创建节点 路径,节点值,Watch,类型
try {
zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
zooKeeper.exists(path, true);
zooKeeper.delete(path, -1);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 数据节点下删除watch
* @param zooKeeper
* @param path
* @param data
*/
public static void createZnodeAndRMDataWatch(ZooKeeper zooKeeper,String path,byte [] data) {
//创建节点 路径,节点值,Watch,类型
try {
zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
zooKeeper.setData(path, "watch1".getBytes(), -1);
ZKDemo zkDemo = new ZKDemo();
byte[] bytes = zooKeeper.getData(path, zkDemo, new Stat());
System.out.println(new String(bytes));
zooKeeper.removeWatches(path, zkDemo, WatcherType.Data, true);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 子节点下删除watch
* @param zooKeeper
* @param path
* @param data
*/
public static void createZnodeAndRMChildWatch(ZooKeeper zooKeeper,String path,byte [] data) {
//创建节点 路径,节点值,Watch,类型
try {
ZKDemo zkDemo = new ZKDemo();
zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
zooKeeper.create(path+"/child2", "child2".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
zooKeeper.setData(path, data, -1);
zooKeeper.getChildren(path, zkDemo);
zooKeeper.removeWatches(path, zkDemo, WatcherType.Children, true);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 关闭zk
*/
public static void close() {
try {
if (zooKeeper != null) {
zooKeeper.close();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void process(WatchedEvent event) {
countDownLatch.countDown();
if (Event.KeeperState.SyncConnected == event.getState()) {//连接状态
System.out.println("连接状态");
} else if (Event.KeeperState.Disconnected == event.getState()) {//断开状态
System.out.println("断开zookeeper");
} else if (Event.KeeperState.AuthFailed == event.getState()) {//身份验证失败
System.out.println("身份验证失败");
} else if (Event.KeeperState.ConnectedReadOnly == event.getState()) {//连接只读状态
System.out.println("连接只读状态");
} else if (Event.KeeperState.SaslAuthenticated == event.getState()) {//sasl授权权限执行ZooKeeper操作
System.out.println("sasl授权权限执行ZooKeeper操作");
} else if (Event.KeeperState.Expired == event.getState()) {//服务器失效
System.out.println("服务器失效");
} else if (Event.KeeperState.Closed == event.getState()) {//客户端关闭
System.out.println("客户端关闭");
} else {
System.out.println("未知");
}
System.out.println("**************************************");
if (Event.EventType.None == event.getType()) {
System.out.println(event.getType());
} else if (Event.EventType.NodeCreated == event.getType()) {
System.out.println(event.getType());
} else if (Event.EventType.NodeDeleted == event.getType()) {
System.out.println(event.getType());
} else if (Event.EventType.NodeDataChanged == event.getType()) {
System.out.println(event.getType());
} else if (Event.EventType.NodeChildrenChanged == event.getType()) {
System.out.println(event.getType());
} else if (Event.EventType.DataWatchRemoved == event.getType()) {
System.out.println(event.getType());
} else if (Event.EventType.ChildWatchRemoved == event.getType()) {
System.out.println(event.getType());
} else {
System.out.println("未知");
}
System.out.println("######################################");
}
}
转载于:https://www.cnblogs.com/ku-ku-ku/p/10980726.html
zookeeper学习二相关推荐
- ZooKeeper学习第七期--ZooKeeper一致性原理
ZooKeeper学习第六期---ZooKeeper机制架构 ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeepe ...
- hadoop hive hbase 入门学习 (二)
hadoop 自学系列 hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...
- ZooKeeper学习第四期---构建ZooKeeper应用
ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeeper学习第三期---Zookeeper命令操作 ZooKeepe ...
- ZooKeeper学习笔记(八):ZooKeeper集群写数据原理
写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...
- C#多线程学习(二) 如何操纵一个线程
C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...
- spring security 学习二
spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...
- STL源码剖析学习二:空间配置器(allocator)
STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...
- mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...
- OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()
OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...
- OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()
OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...
最新文章
- babel 转换箭头函数
- [学习笔记]03.字符串的扩展
- Hypertable 0.9.6.5 发布,分布式数据库
- 阿里高级技术专家:整洁的应用架构“长”什么样?
- 2440,6410,210存储器接口比较
- 学习python、数据结构等很多的博客
- MSF(二):msf外部/内部常用命令
- 使用 C# 代码实现拓扑排序
- WildFly Swarm –将Java EE应用程序部署为独立的Jar
- [原]问题解决办法:there are offline or missing virtual drivers with preserved cache
- mongodb @aggregation 返回字段映射不上_Spring Boot 操作 MongoDB
- 关于AI和区块链的技术落地,你不知道的是……
- IOS 在终端( Terminal )开发
- 微信小程序添加icon图标教程
- 错误: 找不到或无法加载主类 Main
- 使用深度学习技术进行水印去除
- 深度学习21_李宏毅_04_Local Minimum And Saddle Point
- GSCoolink GSV6201 TypeC/DP to HDMI2.1
- Java3d获取坐标_java-使用带有xzyz坐标和jzy3d的3d表面图
- AI各领域产业发展现状
热门文章
- 基于springboot的猫头鹰物业管理系统
- 小米系统wifi服务器,如何将小米8se(MIUI10系统)设置wifi仅连2.4赫兹
- mysql改变授权_mysql8使用grant授权修改
- PHP包含文件函数include、include_once、require、require_once区别和总结
- maven 包上传到远程库,只上传公共模块,微服务或忽略相关模块不上传
- zookeeper和PHP zookeeper和kafka 扩展安装
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_3 mybatis连接池的分类
- Orthanc+OHIF DICOM Viewer最佳Dicom解析、在线浏览实践指南(解决方案)
- [NOIP2016]愤怒的小鸟
- 《机器学习实战》学习笔记第二章 —— K-近邻算法