2-zakoo使用

source:http://kazoo.readthedocs.io/en/latest/basic_usage.html

 

1 基本使用

1.1 连接处理

  要使用zakoo,需要创建一个KazooClient对象,来建立一个和服务器的连接。

  zakoo有一个状态系统,可以注册一个listerner,在状态改变的时候被调用。有三种状态:lost,connected,suspended。

1.2 CRUD

  zakoo可以在znode上进行create、read、update、delete操作。

  create:

     ensure_path(),可以在多层目录中创建不存在的中层目录。但不可以设定节点的内容。

     create(),创建节点和内容。

  read:

     exists(),查看一个节点是否存在

     get(),抓取节点内容。

     get_children(),获取子节点列表

  update:

     set(),操作和create一致。

  delete:

     delete(),删除节点,可以递归删除。

1.3 watchers

  设置检测器,在节点改变或子节点改变时触发。

  第一种设定方式:只接受一次调用,不接受会话事件。在get和get_children里面设定。

  第二种设定方式:每次改变都会触发,不需要重设检测器。

     ChildrenWatch

     DataWatch

1.4 transactions

  将多个命令作为一个单元提交。

  好像没什么用,再说。。

1.5 测试代码

import time
from kazoo.client import KazooClient
from kazoo.client import KazooState

def main():
    #-----------建立连接-----------
    zk = KazooClient(hosts='192.168.10.12:2181')
    zk.start()

    @zk.add_listener
    def my_listener(state):
        if state == KazooState.LOST:
            print('conn lost')
        elif state == KazooState.SUSPENDED:
            print('conn sus')
        else:
            print('conn ok')

    #---------写入节点信息----------
    #zk.create("/worker/process1/125",b"i am award process.")

    #--------读取节点信息----------
    #if zk.exists("/worker/process1/125"):
    #    print("125 exists.")

    #data,stat = zk.get('/worker/process1/125')
    #print(data)

    #children = zk.get_children('/worker/process1')#
    #print(children)

    #-------改写节点信息---------
    #zk.set("/worker/process1/125",b"i am tally process.")
    #data,stat = zk.get('/worker/process1/125')
    #print(data)

    #--------删除节点-----------
    #zk.delete('/worker/process1',recursive=True)
    #pchildren = zk.get_children('/worker')
    #rint(children)

    #--------设置检测器---------
    @zk.ChildrenWatch('/worker')
    def watch_children(children):
        print("Children are now: %s" % children)

    @zk.DataWatch('/worker/process2')
    def watch_node(data,stat):
        print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))

    time.sleep(2)
    zk.stop()

if __name__ == '__main__':
    main()

  

 

posted @ 2018-04-27 17:05  jabbok  阅读(528)  评论(0编辑  收藏  举报