zoukankan      html  css  js  c++  java
  • zkpython使用

    转自小小剑士:http://justfansty.blog.sohu.com/217953183.html

    使用操作之前的代码:

    import zookeeper;#导入zkpython模块

    (1)建立连接

    handler = zookeeper.init("localhost:2181");

    (2)创建节点

    zookeeper.create(handler,"/zkpython_create_node","mydata1",[{"perms":0x1f,"scheme":"world","id":"anyone"}]),0);

    这个地方需要详细的解释一下,第一个参数就是我们刚才建立的链接,第二个参数是创建的节点的路径,第三个是创建的节点的数据,第四个是acl(zookeeper中的访问控制列表),第四个是创建的节点的类型(0表示持久化的,1表示持久化+序号,2表示瞬时的,3表示瞬时加序号型的)

    好...疑问来了,acl的描述为什么是这样的,首先第一个参数是perms,这个代表了控制这个节点的权限,具体值参考如下:

    int READ = 1 << 0;
    int WRITE = 1 << 1;
    int CREATE = 1 << 2;
    int DELETE = 1 << 3;
    int ADMIN = 1 << 4;
    也就是说,这是一个数字,而我们例子中为什么是1f呢?实际上就是 READ | WRITE | CREATE | DELETE | ADMIN的结果,这下明白是什么意思了吧??好,后面还有两个参数,实际上现在java和c的api中定义的值只有两种,除了例子中的还有一种是

    "scheme":"auth","id":""组合的,但是实际上,官方的文档中是有四种的,有兴趣的同学可以参考:

    http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html 里的内容

    (3)查看子节点

    zookeeper.get_children(handler,"/",None);

    (4)获取节点的值及描述信息

    zookeeper.get(handler,"/zkpython_create_node");


    (5)修改节点的值

    zookeeper.set(handler,"/zkpython_create_node","mydata2");

    (6)删除节点的值

    zookeeper.delete(handler,"/zkpython_create_node");

    (7)关闭连接

    zookeeper.close(handler);


    这篇介绍的内容watch的使用,我们知道zookeeper有一个watch机制,可以监听节点上发生的事件,在zkpython中,我们通过如下方式来进行监听.

    比如我们在获取一个节点的时候,给这个节点加一个监听器,具体的代码是:

    import zookeeper;

    def myWatch(handler,type,state,path):
            print "handler:"+str(handler)+",type:"+str(type)+",state:"+str(state)+",path:"+path;        zookeeper.get(handler,path,myWatch);#保证可以被重复监听

    handler = zookeeper.init("localhost:2181");
    data = zookeeper.get(handler,"/zkpython_node",myWatch);

    首先,我们先要定义一个watch方法,比如这里的myWatch方法,之后在调用get方法的时候,把这个watch传递进去就可以了

    接下来详细解释下watcher中的各个参数的意思

    handler:就是我们创建连接之后的返回值,我试了下,发现好像指的是连接的一个索引值,以0开始

    type:事件类型,-1表示没有事件发生,1表示创建节点,2表示节点删除,3表示节点数据被改变,4表示子节点发生变化

    state:客户端的状态,0:断开连接状态,3:正常连接的状态,4认证失败,-112:过期啦

    path:这个状态就不用解释了,znode的路径


  • 相关阅读:
    Maven插件系列之spring-boot-maven-plugin
    Java中getResourceAsStream的用法
    【redis】【linux】-bash: redis-cli: 未找到命令
    【bat】杀死指定端口
    【bat】查看端口占用情况
    【java】【springboot】nohup: 无法运行命令'java': 没有那个文件或目录
    【springboot】启动指定内存大小
    【java】【spring】源码分析,@AliasFor互为别名
    【idea】设置安装插件位置
    【记录】【springboot】java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal解决
  • 原文地址:https://www.cnblogs.com/msnsj/p/4242604.html
Copyright © 2011-2022 走看看