当前位置: 首页 > news >正文

zookeeper Curator(3):Watch事件监听

文章目录

  • Curator API 常用操作 Watch事件监听
  • NodeCache
  • PathChildrenCache
  • TreeCache

本章代码已分享至Gitee: https://gitee.com/lengcz/curator01

Curator API 常用操作 Watch事件监听

在这里插入图片描述

在这里插入图片描述

  • zookeeper 允许用户在指定节点上注册一些Watcher ,并且在一些特定事件触发的时候,zookeeper 服务端会将事件通知到感兴趣的客户端上,该机制是zookeeper 实现分布式协调服务的重要特性。

  • zookeeper 中引入了Wather 机制来实现了发布/订阅功能,能够让多个订阅者同时监听某一个对象,当一个对象自身状态发生变化时,会通知所有订阅者。

  • zookeeper 原生支持通过注册Wather 来进行事件监听,但是其使用起来特别不方便,需要开发人员自己反复注册Wather,比较繁琐。

  • Curator 引入了Cache 来实现对zookeeper 服务端事件的监听。

  • zookeeper 提供了三种Watcher

    • NodeCache : 只是监听某一个特定的节点
    • PathChildrenCache: 监听一个ZNode的子节点。
    • TreeCache :可以监控整个树上的所有节点,类似于PathChildrenCache和NodeCache 的结合

NodeCache

NodeCache 用于监听单个节点的变化,包括节点的创建、更新和删除事件。适用于需要关注特定节点数据变化的场景。

 /*** NodeCache  给指定一个节点注册监听器* @throws Exception*/@Testpublic void testNodeCache() throws Exception{//1  创建NodeCache 对象NodeCache nodeCache = new NodeCache(client,"/app1",false);//2 注册监听nodeCache.getListenable().addListener(new NodeCacheListener() {@Overridepublic void nodeChanged() throws Exception {logger.info("节点变化了");byte[] data = nodeCache.getCurrentData().getData(); // 获取数据logger.info(new String(data));}});//3 开启监听,如果设置 true,则开启监听,加载缓冲数据nodeCache.start(true);// 防止虚拟机退出while(true){}}

NodeCache 会自动处理连接中断和会话过期,并在重新连接后恢复监听。可以通过 nodeCache.getCurrentData() 获取当前节点数据。

PathChildrenCache

PathChildrenCache 监听指定路径下子节点的变化,包括子节点的添加、移除和更新事件。适用于需要监控目录结构变化的场景。
tips: 监听只会对子节点有效,对本节点无效。

   /*** PathChildrenCache  监听某个子节点的所有子节点(不含本节点)* @throws Exception*/@Testpublic void testPathChildrenCache() throws Exception{//1  创建PathChildrenCache对象PathChildrenCache nodeCache = new PathChildrenCache(client,"/app2",true);//2 注册监听nodeCache.getListenable().addListener(new PathChildrenCacheListener() {@Overridepublic void childEvent(CuratorFramework client, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {logger.info("子节点变化");logger.info(JSONObject.toJSONString(pathChildrenCacheEvent));if(pathChildrenCacheEvent.getType().equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){ //子节点变化,打印数据byte[] data = pathChildrenCacheEvent.getData().getData();logger.info(new String(data));}}});//3 开启监听,如果设置 true,则开启监听,加载缓冲数据nodeCache.start();// 防止虚拟机退出while(true){}}

在这里插入图片描述

TreeCache

TreeCache 结合了 NodeCache 和 PathChildrenCache 的功能,可以监听指定节点及其所有子节点的变化。适用于需要完整树形结构监控的场景。

  /*** TreeCache  监听某个子节点自己和所有子节点, 相当于NodeCache和PathChildrenCache的组合* @throws Exception*/@Testpublic void testTreeCache() throws Exception{//1  创建TreeCache对象TreeCache nodeCache = new TreeCache(client,"/app2");//2 注册监听nodeCache.getListenable().addListener(new TreeCacheListener() {@Overridepublic void childEvent(CuratorFramework curatorFramework, TreeCacheEvent treeCacheEvent) throws Exception {logger.info("节点变化");logger.info(JSONObject.toJSONString(treeCacheEvent));if(treeCacheEvent.getType().equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){ //子节点变化,打印数据byte[] data = treeCacheEvent.getData().getData();logger.info(new String(data));}}});//3 开启监听,如果设置 true,则开启监听,加载缓冲数据nodeCache.start();// 防止虚拟机退出while(true){}}

TreeCache 提供的事件类型更丰富,包括 NODE_ADDED、NODE_UPDATED、NODE_REMOVED 等。可以获取完整的节点树结构变化信息。
在这里插入图片描述

http://www.lqws.cn/news/555859.html

相关文章:

  • 使用 Socket.IO 和 TypeScript 由 WebSockets 驱动的聊天应用程序
  • JavaScript中的显式原型与隐式原型:深入理解原型链
  • 车辆车五项查询API: Python 示例
  • Stewart并联结构两自由度正逆解计算和工作空间仿真
  • Word之电子章制作——1
  • 探索钉钉生态中的宜搭:创建与分享应用的新视界
  • 服务器的维护技术都有哪些?
  • docker+n8n的工作流中无法使用本地ollama服务的问题
  • InnoDB的undo日志涉及的页结构
  • mmap映射物理内存之一cache与lock
  • GeoTools 结合 OpenLayers 实现属性查询
  • Stable Diffusion入门-ControlNet 深入理解 第四课:风格迁移与重绘控制模型——让AI也有“艺术天赋”!
  • Git安装避坑指南
  • 【编程实践】利用python在Blender生成三维模型
  • Kafka 消费者重平衡问题排查与优化实践
  • 在单片机中如何实现一个shell控制台
  • 阿里云-arms监控
  • zookeeper Curator(1):认识zookeeper和操作命令
  • 华为云鸿蒙应用入门级开发者认证 实验部分题目及操作步骤
  • 【龙泽科技】新能源汽车故障诊断仿真教学软件【吉利几何G6】
  • Qt:QCustomPlot库的QCPAxis
  • 第一章 城镇道路工程 1.5 安全质量控制
  • python解释器 与 pip脚本常遇到的问题汇总
  • PYTHON从入门到实践7-获取用户输入与while循环
  • 医疗标准集中标准化存储与人工智能智能更新协同路径研究(上)
  • Next.js实战:AI两小时开发文档社区
  • pytest 中的重试机制
  • 分布式电源采集控制装置:江苏光伏电站的“智能调度中枢
  • 【Java--SQL】${}与#{}区别和危害
  • 如何关闭win更新-随笔11