使用kazoo连接zookeeper并监听节点数量以及值变化

本文介绍了如何使用kazoo库连接Zookeeper并进行节点监控。通过监控节点数量的变化,可以实现服务发现、主备切换、独占锁和分布式锁等功能。同时,文章讲解了两种类型的Watcher:监听子节点变化和节点数据变化,并提供了一个同时监听子节点和当前节点数据变化的watcher类的封装示例,适用于集中配置管理和消息队列等场景。
摘要由CSDN通过智能技术生成

  目前kazoo是连接zk的最新第三方库,最新更新时间为2019年1月,其他第三方连接zk的库都长时间未更新,所以推荐使用kazoo。前面有几篇文章都已经详细给出了zk的部署,接下来是zk最核心的地方,将zk的数据结构特性跟业务场景相结合,实现复杂需求,本文给出基本demo用法介绍。

1、监控节点数量的变化

  基本操作,创建、更新、删除,kazoo接口已经足够简单,入参类型如果不懂,可以直接看源码,同时也有助于深入了解别人是如何构思python“中间件”

from kazoo import exceptions
from kazoo.client import KazooClient
from kazoo.client import ChildrenWatch
from kazoo.client import DataWatch

def normal_test(zk_path,host,port,node_list):
    zk=KazooClient(hosts=host+':'+port,timeout=5)
    zk.start(timeout=5)

    if not zk.exists(zk_path):
        print("node:{} does't exists".format(zk_path))
        # 创建当前节点,持久性节点,值需要设为byte类型
        zk.create(path=zk_path,value=b'bar')

    # 这里是获取当前节点的子节点列表,可以设定watch以及是否返回节点数据
    child_node_list=zk.get_children(zk_path,watch=None,include_data=False)
    # 创建多个子节点,值可以设为一样,因为这里关注子节点是否存在,不关心其值
    if not child_node_list:
        for sub_node in node_list:
            zk.create(zk_path + '/' + sub_node,b'1')
    else:
        print('subnode list:{}'.format(child_node_list))

    # 获取当前节点的znode对象:含data和ZnodeStat对象
    data,stat=zk.get(zk_path)
    print('current node data:{}'.format(data))
    print('data version:{}'.format(stat.version))
    print('data length:{}'.format(stat.data_length))
    print('children node numbers:{}'.format(stat.numChildren))

    # 更新节点数据,可以指定值和版本,成功更新则ZnodeStat 对象
    stat_new=zk.set(zk_path,value=b'foo')
    print('node {0} is updated:{1}'.format(zk_path,stat_new))

    # 删除当前节点,若当前节点有子节点,则提示无法删除,需要使用递归删除
    zk.delete(zk_path,recursive=True)
    try:
        last=zk.get_children(zk_path)
        print('children nodes :{}'.format(last))
    except exceptions.NoNodeError
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值