Curator使用琐事杂记

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权限

 

 

 

 

 

 

 

 

 

                                                                                                               待补充.....................

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值