文章目录

  • 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.pswp.cn/pingmian/86642.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86642.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86642.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态融合相机L3CAM

多模态融合相机L3CAM L3CAM是Beamagine公司推出的多模态传感器融合技术,结合了激光雷达(LiDAR)和可见光摄像头,旨在为自动驾驶、工业机器人和其他需要精确环境感知的应用场景提供高效、安全的解决方案。 L3CAM技术参数 L3CAM结合…

结构化思维

前言 洞悉分析方法论 系统解决管理问题 1 构建问题分析框架 1.1 摘要 (1)何谓问题分析和解决? (2)问题分析和解决的基本原则 1.2 什么是问题分析与决策? 1.3 问题解决者需要具备的四种能力 &#xf…

什么是数字签名(ECDSA)?

数字签名是区块链、数字身份认证和安全通信的核心技术之一,ECDSA(椭圆曲线数字签名算法)是目前最常见、最主流的数字签名算法之一,尤其在区块链系统(如比特币、以太坊、EOS)中广泛应用。 一、什么是数字签名…

深入剖析AI大模型:Dify的介绍

今天介绍的内容,跟大模型开发还是息息相关的。俗话说:有人的地方就是江湖!对于我们技术其实也一样,一个新技术的出现,自然会衍生出相应的生态圈。今天的文字只是介绍,以后会有专门的实操篇,主要…

Open VSX Registry关键漏洞使攻击者可完全控制Visual Studio Code扩展市场

网络安全研究人员近日披露了 Open VSX Registry("open-vsx[.]org")中存在的一个关键漏洞。若被成功利用,攻击者可能完全控制整个 Visual Studio Code 扩展市场,造成严重的供应链风险。 漏洞详情与潜在影响 Koi Securi…

Python从入门到高手9.1节-Python中的字典类型

目录 9.1.1 理解字典类型 9.1.2 字典的类型名 9.1.3 字典的定义 9.1.4 字典的主要性质 9.1.5 好好学习,天天向上 9.1.1 理解字典类型 在日常生活中,我们常常会接触到“字典”这种数据类型,例如一本书籍的目录结构,在目录结构…

封禁UDP端口提高防御能力分析

封禁不必要的 UDP 端口 确实可以在一定程度上提高系统的防御力,但这并不是一个绝对的“好”或“坏”的问题,需要根据具体情况来判断。以下是详细分析: ✅ 封禁 UDP 端口能提高防御力的原因 (优点) 减少攻击面: 服务暴露&#xff…

阿里云-arms监控

监控java应用 若是容器集群环境,则选择容器服务环境 手动安装方式,是手动把 agent的jar包放到 ecs服务器,然后运行个人的spring boot服务时,加上一些参数,将agent也启动运行 手动集成-添加agent 监控的是ecs中的java应…

c语言 char *str = ““ 和 char *str = NULL 以及 char str[] = {} 区别

目录 前言char *str "" 和 char *str NULL 区别char *str NULL 和 char str[] {} 区别char *str "" 和 char str[] {} 区别char *str "" 和 const char *str "" 区别 前言 C语言指针的使用非常常见且易出错,这里对…

小程序入门: tab bar 实现多页面快速切换效果

在小程序开发中,tab bar 是实现多页面快速切换的关键组件,能极大提升用户体验。上一篇我们完成了基础配置,今天深入探索,打造更丰富实用的 tab bar 效果。 实现目标 这次要在小程序底部创建包含 “首页”“消息”“联系我们” 三…

Python 数据分析:numpy,抽提,多维切片索引

目录 1 示例代码2 欢迎纠错3 免费爬虫------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个…

【向上教育】结构化面试概述.pdf

目 录 第一章 面试须知—面试形式 .......................................................................................................... 1 一、结构化面试 .................................................................................................…

STM32F407控制单个张大头闭环步进电机讲解与梯形加减速(HAL库)

文章目录 硬件连接CubeMX配置**使用TIM5定时器CH3,即PA2作为脉冲控制,PE5控制方向(TIM5_CH4是为控制双电机做准备的可以先不配置)** 设置占空比为50%,以下为AI讲解重要!!!定时器更新中断脉冲触发原理详解PW…

MongoDB入门学习(含JAVA客户端)

0.序章 致命的面试问题:为什么使用MongoDB? 大型的分布式的文档型数据库,也是NoSQL数据库(例如 redis) MongoDB适合数据量大而价值又低的这种数据(播放进度、评论、弹幕,实时数据的CRUD&…

RedisCache与StringRedisTemplate的深度对比

1. 基本概念 RedisCache ​​定位​​:自定义封装的Redis缓存工具类​​特点​​:通常针对业务场景进行了高层抽象​​典型功能​​: 带过期时间的缓存操作自定义序列化方式业务键前缀管理简化常用操作API StringRedisTemplate ​​定位…

HOOPS Visualize技术详解(二):3D图形系统HOOPS/3DGS的段结构与属性机制

在工业级三维可视化领域中,HOOPS Visualize凭借其高性能和模块化设计被广泛应用于CAD、CAM、仿真、BIM等工程软件中。其中,HOOPS 3D Graphics System(简称HOOPS/3DGS)是HOOPS Visualize的核心组件,承担着图形场景管理、…

随机化在临床试验中的应用与挑战

一、随机化的核心目的 1.1 控制混杂偏倚 1.1.1 平衡预后因素 确保已知/未知预后因素在组间分布均衡,避免基线不平衡影响结果。 1.1.2 避免选择偏倚 防止研究者或患者主观选择分组,保障组间差异归因于干预。 1.2 保障统计推断有效性 1.2.1 满足独立性假设 满足统计检验…

在C++中#pragma“可选预处理指令的作用“。

文章目录 1. 标准定位:2. 语法形式:3. 常见用途举例4. 为什么用 #pragma?5. 宏里用 __pragma / _Pragma6. 常见误区 在 C/C 里,#pragma 本质上是“可选预处理器指令”,用来告诉编译器在编译某段代码时启用或关闭某些特…

windows系统中docker数据迁移出系统盘

1、关闭docker 2、移动docker数据 找到docker数据目录,一般在C:\Users\61050\AppData\Local\Docker文件,将整个docker目录复制到其他盘(例如 D:\Docker),为保证不出错,可以先提前复制一份。 3、创建符号链…

win11电脑突然休眠问题排查

WinR, 输入eventvwr.msc打开事件查看器。找到出现问题的时间点那条数据。会显示原因。首先还是要先排查原因。再去猜测。我因为猜测就直接去了科技市场扫灰加硅来了一个遍。另外还买了散热风扇和金属支架。虽然不知道有没有必要。但是别人是很原因。到头来早上还是发现自动休眠…