文章目录

  • PathChildrenCache
  • API

PathChildrenCache

  • NodeCache不仅可以监听节点内容变化,还可以监听指定节点是否存在。如果原本节点不存在,那么Cache就会在节点被创建时触发监听事件,如果该节点被删除,就无法再触发监听事件。
  • PathChildrenCache用于监听数据节点子节点的变化情况。
  • curator之事件监听详解

API

package com.ruozedata.bigdata.zookeeper;import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.concurrent.CountDownLatch;public class PathChildrenListener {private static Logger logger = LoggerFactory.getLogger(PathChildrenListener.class);private static CountDownLatch watch = new CountDownLatch(1);private static final String zkServerIps = "ruozedata000:2181";  //可以写多个地址,逗号分隔private static RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);// 实例化Curator客户端private static CuratorFramework client = CuratorFrameworkFactory.builder()                  // 使用工厂类来建造客户端的实例对象.connectString(zkServerIps)                         // 放入zookeeper服务器ip.sessionTimeoutMs(15000).retryPolicy(retryPolicy)   // 设定会话时间以及重连策略.build();                                           // 建立连接通道/*** 注册监听* TreeCache: 可以将指定的路径节点作为根节点(祖先节点),对其所有的子节点操作进行监听,* 呈现树形目录的监听,可以设置监听深度,最大监听深度为 int 类型的最大值。*/private static void zkWatch(String path) throws Exception {TreeCache treeCache = new TreeCache(client, path);treeCache.getListenable().addListener(new TreeCacheListener() {@Overridepublic void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {ChildData eventData = event.getData();switch (event.getType()) {case NODE_ADDED:logger.warn(path + "节点添加" + eventData.getPath() + "\t添加数据为:" + new String(eventData.getData()));break;case NODE_UPDATED:logger.warn(eventData.getPath() + "节点数据更新\t更新数据为:" + new String(eventData.getData()) + "\t版本为:" + eventData.getStat().getVersion());break;case NODE_REMOVED:logger.warn(eventData.getPath() + "节点被删除");break;default:break;}}});treeCache.start();watch.await();  //如果不执行 watch.countDown(),进程会一致阻塞在 watch.await()}// 获取节点数据private static void getZnode(String path) throws Exception {byte[] bytes = client.getData().forPath(path);                     // 普通查询System.out.println(new String(bytes));}// 关闭连接private static void closeZnode() {if (client != null) {client.close();}}public static void main(String[] args) throws Exception {client.start();         // 启动Curator客户端System.out.println(client.getState());    //获取连接状态String path = "/ruoze";getZnode(path);        // 获取节点数据zkWatch(path);          // 监听这个节点closeZnode();           // 关闭Curator客户端}}

curator 监听数据节点子节点的变化情况相关推荐

  1. Zk监听机制入门和节点属性信息

    zk监听主要是监听:节点创建,节点删除,节点改变.子节点改变 我这里用node-1和node-3同时连接node-1 zk客户端监听功能一般步骤: 1.客户端设置监听事件 命令:get 节点 watc ...

  2. 删除父节点子节点未删除的两种方法

    删除父节点子节点未删除的两种方法 平时所使用的tree删除父节点,子节点还保留在数据库. 删除前: 删除后: 父节点已删除,但数据库保留了子节点数据,以下有两种方法解决 方法一: 使用递归删除方法,我 ...

  3. js给php注册网页添加实时监听,js 实现watch监听数据变化的代码

    1.js /** * @desc 属性改变监听,属性被set时出发watch的方法,类似vue的watch * @author Jason * @study https://www.jianshu.c ...

  4. 微信小程序,实现 watch 属性,监听数据变化

    转自微信小程序,实现 watch 属性,监听数据变化 目标 在微信小程序实现 watch 属性,监听 data 中的属性,当被监听属性的值改变时,执行我们指定的方法.​​ 思路 Vue 的 compu ...

  5. linux 监听数据包,linux下网络监听与发送数据包的方法(即libpcap、libnet两种类库的使用方法)...

    linux下可以用libpcap函数库实现监听数据包,使用libnet 函数库发送数据包 安装: 在命令行下apt-get install 就可以了 libpcap的使用: /*author hjj ...

  6. vue,watch监听数据,数据监听

    vue,watch监听数据,数据监听 三个值: 1.第一个handler:其值是一个回调函数.即监听到变化时应该执行的函数. 2.第二个是deep:其值是true或false:确认是否深入监听.(一般 ...

  7. JavaWeb项目监听数据表变化并通知前台(数据来源于自身)

    最近公司有些项目中需要java程序去监听数据表,当数据有变化时把新数据通知前台并且展示出来.本人也去百度上查询了好多相关知识(本意是有现成抄的就直接抄,哈哈,但无奈没有),然后根据自己的理解写了个de ...

  8. ROS2学习笔记22--使用launch启动/监听多个node节点

    概要:这篇内容主要介绍如何使用launch启动/监听多个node节点 环境:ubuntu20.04,ros2-foxy,vscode 最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常 ...

  9. VB6 Treeview的添加节点子节点、Treeview打开、Treeview关闭

    =================== VB6 Treeview的添加节点子节点.Treeview打开.Treeview关闭 '在窗体上方一个Treeview,四个command     Option ...

最新文章

  1. 【Python】创建和使用类
  2. 解决Weblogic 本机可以访问控制台,网络IP访问不了
  3. 【Python】SQLAlchemy:session何时commit,何时close?
  4. PHP 设计模式之迭代器模式
  5. 《Flask Web开发——基于Python的Web应用开发实践》代码使用方法
  6. js导出excel单元格内换行符代码_前端和excel的那些事
  7. a标签点击跳转失效--IE6、7的奇葩bug
  8. 【Java】输入三角形的三边长,求三角形的面积
  9. Cocos2dx中利用双向链表实现无限循环滚动层
  10. Picasso源码阅读笔记六
  11. java list 排序_java 对list进行排序
  12. python爬虫英文翻译_python爬虫学习---爬取微软必应翻译(中英互译)
  13. 访问类路径下资源的两种方式
  14. 世界上最详细的Linux C udp实现文件传输
  15. Shell_NotifyIcon
  16. 世界上有10种人,一种是懂二进制的人,一种是不懂二进制的人。
  17. 在python中使用matplotlib画简单折线图
  18. 数据中台全景架构及模块解析!一文入门中台架构师!
  19. linux运维要经常加班吗,请好好善待你身边的Linux运维工程师,因为他们…
  20. 30秒集结会议、能开“会中会” IMO班聊助力高效协同办公

热门文章

  1. oracle修改表名
  2. Android S 修改关于手机的logo
  3. IDEA maven 右键不能run 解决办法
  4. Team Leader 你不再只是编码, 来炖一锅石头汤吧
  5. Linux C语言通过curl下载https资源
  6. 使用canvas画图形
  7. MySQL数据库命令大全
  8. 如何设计出好看的UI界面
  9. 计算机考研真实情况,上海交通大学计算机考研经验:把握最真实的自己,深刻地解读自己...
  10. java 可变参数列表