10. Zookeeper JavaAPI-Watcher监听节点变化

本文详细介绍了Zookeeper的监听机制,包括全局监听器和局部监听器的使用。全局监听器在创建Zookeeper连接时指定,无限监听事件,而局部监听器在节点操作时指定,一次性监听。文章通过API讲解、测试用例和Shell客户端操作展示了如何实现节点变化的监听,并在控制台输出相应事件。
摘要由CSDN通过智能技术生成

Zookeeper 可以监听节点数据变化或子节点数量变化. 当监听的事件发生后, 会通知监听器对事件做相应的处理.

1. Zookeeper监听

1.1 监听器类型

从监听器范围来区分, Zookeeper 监听器分为两种, 一种是全局监听器,一种是局部监听器.

  • 全局监听器: 创建Zookeeper 连接时指定, 全局唯一. 一旦注册不能删除, 默认无限监听事件.
  • 局部监听器: 对节点进行操作时, 指定具体场景的监听器. 默认一次注册监听, 只能处理一次事件触发.

1.2 事件类型

Zookeeper 监听的事件类型有四种:

  • EventType.NodeCreated: 节点创建事件
  • EventType.NodeDeleted: 节点删除事件
  • EventType.NodeDataChanged: 节点数据内容变更
  • EventType.NodeChildrenChanged: 子节点数量发生变化, 新增或删除子节点. 子节点内容发生变化, 不会触发.

2. 使用全局监听器监听

  • 一条Zookeeper 连接只有一个全局监听器, 在创建Zookeeper对象时指定
  • 全局监听器中监听的事件, 只能注册, 不能删除. 除非断开连接, 重新连接. 因此要慎用
  • 全局监听器中监听的事件, 会循环监听. 并非触发一次就终止了.
  • 全局监听器中需要根据节点路径和事件类型综合判断来做相应的业务逻辑.

2.1 全局监听器API

  • 使用全局监听器的API 都会传一个boolean 类型为true的参数, 声明此操作需要监听, 会在全局监听器中注册一条监听信息, 但不能删除.
  • 当监听的事件发生后, 会触发全局监听器进行处理. 因此需要在全局监听器中根据节点路径和事件类型做判断.
public byte[] getData(final String path, Boolean watcher, Stat stat);
public List<String> getChildren(final String path, Boolean watcher);
public Stat exists(final String path, Boolean watcher);
....

2.2 测试用例

public class TestWatch {
   

    // zookeeper 地址, 多个地址以逗号割开
    private static String zkServer = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183";

    // 会话超时时间
    private static int sessionTimeout = 3000;

    // zookeeper 客户端连接
    private static ZooKeeper zooKeeper;

    @BeforeClass
    public static void init() throws Exception{
   
        // 创建zookeeper 连接时, 设置全局监听器
        zooKeeper = new ZooKeeper(zkServer, sessionTimeout, watchedEvent ->{
   
            try {
   
                // 获取发生事件的节点路径
                String path = watchedEvent.getPath();

                // 根据节点路径和事件类型做不同的业务的处理
                if ("/".equals(path) && Watcher.Event.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值