当前位置: 首页 > 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.lryc.cn/news/576572.html

相关文章:

  • 从单体架构到微服务:微服务架构演进与实践
  • 从台式电脑硬件架构看前后端分离开发模式
  • Spring Boot 3 多数据源改造全流程:Druid、HikariCP 与 dynamic-datasource 实战总结
  • 内网横向-工作流
  • 典型工程应用三
  • [rootme:ctf all the day]Ubuntu 8.04week wp
  • python 项目利用uv管理python包依赖
  • phpstudy 可以按照mysql 数据库
  • cf 禁止http/1.0和http/1.1的访问 是否会更安全?
  • 《自动控制原理 》- 第 1 章 自动控制的基本原理与方式
  • Confluence-测试用例执行规范
  • srs-gb28181 与 SRS 5.0 对 GB28181 国标支持
  • Learning to Prompt for Continual Learning
  • python基础21(2025.6.28)_全栈爬取_车168以及诗词名句案例
  • AUTOSAR图解==>AUTOSAR_AP_EXP_SOVD
  • Linux快速查找文件
  • JVM 之双亲委派机制与打破双亲委派
  • 【安卓Sensor框架-2】应用注册Sensor 流程
  • Everything
  • 深入解析 Electron 核心模块:构建跨平台桌面应用的关键
  • day45 Tensor board使用介绍
  • 【Bluedroid】蓝牙启动之BTM_reset_complete源码解析
  • 虚拟 DOM 与 Diff 算法
  • c++学习(五、函数高级)
  • 【AI智能体】Dify 核心组件从使用到实战操作详解
  • 设计模式-代理模式、装饰者模式
  • 【Java--SQL】${}与#{}区别和危害
  • git使用详解和示例
  • ByteMD+CozeAPI+Coze平台Agent+Next搭建AI辅助博客撰写平台(逻辑清楚,推荐!)
  • epitope3D: 精准预测蛋白表面的“抗原决定簇”