python实现ZooKeeper分布式队列

Zookeeper数据模型

基本概念:结点和结构

zookeeper的数据模型与Linux的文件系统很相似,都是采用树形结构。每一个Linux中的目录对应数据模型的一个结点,结点还是用目录的形式进行表示。如下图/testQueue就是一个结点,既可以存储数据也可以挂载其他节点。

zookeeper数据模型结构

结点类型

顺序结点:在创建父节点时可以指定参数让子节点是有按顺序的。
持久结点:结点一旦创建就会一直在zookeeper服务器上,只有进行删除操作时才会被删除。默认子结点是无序的。
临时结点:只有客户端连接zookeeper服务器建立会话才会存在,一旦会话失效,临时结点就会被删除。默认子结点是无序的。
持久顺序结点:创建父节点时指定参数sequence=Ture。其子结点是有序的,其他与持久结点性质类似。
临时顺序结点:创建父节点时指定参数sequence=Ture。其子结点是有序的,其他与临时结点性质类似。

代码实现

可以从不同的客户端访问zookeeper。

from kazoo.client import KazooClient

hosts = "192.168.45.103:2181" #要连接的zookeeper服务器ip地址+端口
zk = KazooClient(hosts=hosts) 
zk.start()

#创建结点插入数据    
zk.ensure_path('/test_zq')
zk.create('/test_zq/node1',b'0001')    
zk.create('/test_zq/node2',b'0002')   
#以队列读取结点数据    
def getData():           
    children = zk.get_children('/test_zq')#获取结点下的全部子结点,函数返回值是一个列表,每个子结点的相对路径
    list_queue= sorted(children)   #取的是目录名称,并将这些名称进行排序
    child = list_queue[0]          #取队首元素
    path = '/test_zq/' + child   #将相对路径与父节点绝对路径组装得到子结点绝对路径
    data,stat = zk.get(path)       #获取子结点数据与状态
    zk.delete(path,recursive=True) #删除队首元素
    return data                      
print(getData())
print(getData())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值