Curator使用琐事杂记 博客分类: 架构相关 zookeepercurator
程序员文章站
2024-02-17 11:41:28
...
Watcher部分
- 这种方式只能监听一次,监听完了需要重新注册watcher
client.getChildren().usingWatcher(new AA2.Watcher()).forPath("/b");
- PathChildrenCache 只能监听本层以及第一层子层(监听/b 只能监听到/b/c,不能监听到/b/c/d),且每次生成时,假如节点存在,会被重复通知一次节点created事件
PathChildrenCache childrenCache2 = new PathChildrenCache(client, "/b", true); childrenCache2.start(); childrenCache2.getListenable().addListener(new PathChildrenCacheListener() { @Override public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { System.out.println("cache事件:" + event.getType()+" "+event.getData().getPath()); } });
其中event.getData() 有可能为null
- TreeCache可以监听节点下所有子节点的变更
ACL部分
- ACL并无递归机制,任何一个znode创建后,都需要单独设置ACL,无法继承父节点的ACL设置
- 程序对节点设置ACL时必须先
DigestAuthenticationProvider.generateDigest("spjich:spjich")
获取加密后的秘钥
spjich:TyD9qsQm0ojLLJ8B14A3R2wYuKU=
然后再
ACL aclRoot = new ACL(ZooDefs.Perms.ALL, new Id("digest", "spjich:TyD9qsQm0ojLLJ8B14A3R2wYuKU=")); List<ACL> aclList = new ArrayList<ACL>(); aclList.add(aclRoot); client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT) .withACL(aclList) .forPath("/b/c/d");
而客户端想访问被ACL控制的节点时必须先进行“身份验证”,可以通过如下设置进行(注意:加密时用的是生成的秘钥,登录时用的是原始密码)
CuratorFramework client = CuratorFrameworkFactory.builder() .connectString("172.171.51.151:2181") .authorization("digest","spjich:spjich".getBytes()) .retryPolicy(new RetryNTimes(3, 1000)) .connectionTimeoutMs(5000).build(); client.start();
- 节点的Listener事件受节点的ACL权限影响,如果Listener希望接收到某节点的事件,则必须有该节点的ACL权限
待补充.....................
上一篇: python 精通 Python
下一篇: 【LeetCode】53. 最大子序和