写点什么

zookeeper-watcher、事务、分布式锁的 API 使用

作者:zarmnosaj
  • 2022 年 10 月 08 日
    四川
  • 本文字数:1165 字

    阅读完需:约 4 分钟

watcherAPI

curator 提供了两种 Watcher(Cache)来监听结点的变化:


  1. Node Cache : 只是监听某一个特定的节点,监听节点的新增和修改

  2. PathChildren Cache : 监控一个 ZNode 的子节点. 当一个子节点增加, 更新,删除时, Path Cache 会改变它的状态, 会包含最新的子节点, 子节点的数据和状态


client = ...(连接代码)
NodeCache nodeCache=new NodeCache(client,"/watcher");nodeCache.start();nodeCache.getListenable().addListener(new NodeCacheListener() { public void nodeChanged() throws Exception { ...... }});
复制代码


new NodeCache(arg1,arg2) :arg1:连接对象、arg2:监视节点的路径


nodeCache.start(): 启动监视器对象


addListener(): 节点变化时的回调方法




另外也可以定义监视子节点的方法,不同的地方是:


PathChildrenCache pathChildrenCache=new PathChildrenCache(client,"/watcher",true);
复制代码


其中第三个参数用于设置事件中是否可以获取节点的数据

zookeeper 事务

client = ...(连接代码)
client.inTransaction().create().forPath("node1", "abc".getBytes()).and().create().forPath("node2", "def".getBytes()).and().commit();
复制代码


将两次创建节点合并为了一个原子操作,只有都创建成功后事务才会提交,否则会回滚,两个节点都不会创建成功

分布式锁

首先 zookeeper 实现分布式锁有两种类型,一种是排它锁,另一种是读写锁。


  1. InterProcessMutex:分布式可重入排它锁

  2. InterProcessReadWriteLock:分布式读写锁


定义并获取排它锁:


client = ...(连接代码)
InterProcessLock interProcessLock = new InterProcessMutex(client,"/lock");interProcessLock.acquire();...interProcessLock.release();
复制代码


代码释义:new InterProcessMutex(arg1,arg2) : 定义排它锁


interProcessLock.acquire() : 获取排它锁


interProcessLock.release() : 释放排它锁




定义并获取读锁:


client = ...(连接代码)
InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock");
InterProcessLock interProcessLock=lock.readLock();
interProcessLock.acquire();...interProcessLock.release();
复制代码


代码释义:new InterProcessReadWriteLock: 定义读写锁


lock.readLock(): 获取读锁对象


interProcessLock.acquire() :获取读锁


interProcessLock.release() : 释放读锁




定义并获取写锁:


client = ...(连接代码)
InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock");
InterProcessLock interProcessLock=lock.writeLock();
interProcessLock.acquire();...interProcessLock.release();
复制代码


代码释义:new InterProcessReadWriteLock: 定义读写锁


lock.writeLock(): 获取写锁对象


interProcessLock.acquire() :获取读锁


interProcessLock.release() : 释放读锁

发布于: 刚刚阅读数: 3
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
zookeeper-watcher、事务、分布式锁的API使用_10月月更_zarmnosaj_InfoQ写作社区