kazoo
zk是用java开发的,因此sdk对java支持比较好,我们使用的是python语言,借助第三方库kazoo,网站 https://kazoo.readthedocs.io/en/latest/index.html 网站里面有比较详细地介绍kazoo的使用方法和注意事项,我们这里只列举常见的使用方法,具体深入的请前往网站仔细阅读。
安装
安装kazoo比较简单,yum可以使用
pip可以使用
安装成功之后,我们验证一下是否安装可用
CRUD例子
我们先写一个最简单的节点CRUD例子,kazoo这个库它内部会开工作线程执行相关连接和指令操作,不会阻塞主线程,还有在kazoo线程再去执行zk的指令操作会卡死整个程序,这个是需要注意的。
监听
除了CRUD常用操作以外,还有一个非常实用的功能就是监听节点(可以是节点的添加、删除、节点的数据更新)。kazoo提供了2种监听节点的方法,第一种是比较简单的,如下面官方提供的代码例子:
def my_func(event):
# check to see what the children are now
# Call my_func when the children change
children = zk.get_children("/my/favorite/node", watch=my_func)
这种监听方法,当对应节点触发了,只会通知回调一次,如果需要继续监听需要再手动设置多次监听函数。下面介绍另外一种监听方法,只需要设定一次,每次有事件都会通知到回调函数而且通知类型数据比较丰富。下面列的是官方的例子代码片段,使用了python的装饰器。
@zk.ChildrenWatch("/my/favorite/node")
def watch_children(children):
print("Children are now: %s" % children)
# Above function called immediately, and from then on
@zk.DataWatch("/my/favorite")
def watch_node(data, stat):
print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))
一个完整的监听例子代码
测试
先运行测试程序,然后再开一个新的ssh中断使用zkCli.sh连接zk,执行以下测试指令
#创建一个测试节点
create /my/favorite/test 'test'
#删除测试节点
delete /my/favorite/test
#设置节点数据
set /my/favorite/node '123'
测试程序先后输出如下