二维码
微世推网

扫一扫关注

当前位置: 首页 » 企业商讯 » 供求资讯 » 正文

Curator客户端子节点监听机制源码分析你了解多少?

放大字体  缩小字体 发布日期:2022-04-18 01:14:35    浏览次数:127
导读

上一篇:Curator客户端创建zk节点源码分析一、demopublic static void main(String[] args) throws Exception {RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181",5000,3000,retryPolic

上一篇:Curator客户端创建zk节点源码分析

一、demo

public static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3); Curatorframework client = CuratorframeworkFactory.newClient( "localhost:2181", 5000, 3000, retryPolicy); client.start(); PathChildrenCache pathChildrenCache = new PathChildrenCache( client, "/cluster", true); pathChildrenCache.start(); // cache就是把zk里得数据缓存到了你得客户端里来 // 你可以针对这个缓存得数据加监听器,去观察zk里得数据得变化 pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() { public void childEvent(Curatorframework curatorframework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception { } }); }

我们来看一下这行代码,是如何创建得

PathChildrenCache pathChildrenCache = new PathChildrenCache( client, "/cluster", true);

注释:启动缓存。缓存不会自动启动。您必须调用此方法。

说明调用start方法时默认不会缓存数据

默认走NORMAL分支,我们点进去看看

这里就启动了一个线程,将传递进来得Operation放入operationsQuantizer,如果放成功则启动一个线程,将Operation从operationsQuantizer删除,调用invoke方法,我们在返过去看一下这个Operation

这个里面invoke方法会去调用PathChildrenCache得refresh方法,我们在感谢阅读进去看一下

方法注释:

这个方法得是确保监听得目录在zk中已经存在了

这里会根据构造器得模式先获取出一个GetChildrenBuilder,在调用GetChildrenBuilder得usingWatcher方法将watcher监听器保存进去,在通过inBackground方法将刚刚创建得BackgroundCallback回调保存

实际逻辑则在forPath方法里面,这个因为是后台请求,我们直接看processBackgroundOperation方法,这里得话会创建一个OperationAndData类,将自己作为operation传递进去

这里得话实际就是调用OperationAndData类得callPerformBackgroundOperation方法,而这个方法其实就是调用刚刚传递进来得GetChildrenBuilderImpl得performBackgroundOperation方法

简要说明就是forPath方法会调用performBackgroundOperation方法,这个方法会调用zk原生得api给他一个Watcher监听器,zk如果有子节点发生事件会通知原生得Watcher反过来调用我们注册得listener;

 
(文/小编)
打赏
免责声明
• 
本文为小编原创作品•作者: 小编。欢迎转载,转载请注明原文出处:http://www.udxd.com/qysx/show-120445.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们邮件:weilaitui@qq.com。
 

Copyright©2015-2023 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈