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

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.xdnf.cn/news/14679.html

相关文章:

  • 搭建Flink分布式集群
  • 深入详解:随机森林算法——概念、原理、实现与应用场景
  • Spring Cloud:高级特性与最佳实践
  • Python基础知识之文件
  • 深入剖析 CVE-2021-3560 与 CVE-2021-4034:原理、区别与联系
  • SQL学习笔记4
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • 基于springboot的火锅店点餐系统
  • 代码随想录|图论|09沉没孤岛
  • 中国双非高校经费TOP榜数据分析
  • 【数据结构】B树的介绍及其实现C++
  • 鸿蒙OS开发IoT控制应用:从入门到实践
  • EXCEL数据报表
  • 修改Docker-compose使Uptime-Kuma支持IPV6
  • 免费无广告PDFCreator:虚拟打印软件一键转 PDF/PNG/JPG
  • Solidity学习 - 未授权访问
  • 问卷调查 [oled]
  • 车载诊断架构--- 车载诊断中的引导式诊断
  • MySQL(1)——count()聚合函数
  • OkHttp 简单配置
  • 链表题解——两数相加【LeetCode】
  • .NET MAUI跨平台串口通讯方案
  • 永磁无刷电机旋转原理
  • 架构轻巧的kokoro 文本转语音模型
  • Apipost 和 Apifox 2025最新功能对比分析
  • 2-深度学习挖短线股-1-股票范围选择
  • [3D-portfolio] 版块包装高阶组件(封装到HOC) | Email表单逻辑 | 链式调用
  • 桌面小屏幕实战课程:DesktopScreen 11 SPI 水墨屏
  • 基于SpringBoot和Leaflet的区域冲突可视化-以伊以冲突为例
  • Robyn高性能Web框架系列06:使用WebSocket实现产品智能助理