分布式队列简单理解就是:
帮助我们实现跨进程、跨主机、跨网络的数据共享和数据传递
(之前文章 "分布式消息队列" 介绍的更详细一点)
zookeeper是一个简单可靠的分布式队列实现方式
Zookeeper可以处理两种类型的队列:
(1)同步队列
当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达
例如一个班去旅游,看是否所有人都到齐了,到齐了就发车
例如有个大任务分解为多个子任务,要所有子任务都完成了才能进入到下一流程
(2)先进先出队列
按照FIFO方式进行入队和出队
例如实现生产者和消费者模型
实现思路
01
同步队列
在zookeeper中先创建一个根目录 queue_sync,做为队列
队列的消费者监视/queue_sync/start节点,刚开始还没有这个节点,所以什么都不会做
入队操作就是在queue_sync下创建子节点,然后计算子节点的总数,看是否和队列的目标数量相同
如果相同,创建/queue_sync/start节点,由于/queue_sync/start这个节点有了状态变化,zookeeper就会通知监视者:队员已经到齐了,监视者得到通知后进行自己的后续流程
02
先进先出队列
在zookeeper中先创建一个根目录 queue_fifo,做为队列
入队操作就是在queue_fifo下创建自增序的子节点,并把数据放入节点内
出队操作就是先找到queue_fifo下序号最下的那个节点,取出数据,然后删除此节点