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()