分布式队列简单理解就是:


帮助我们实现跨进程、跨主机、跨网络的数据共享和数据传递


(之前文章 "分布式消息队列" 介绍的更详细一点)


zookeeper是一个简单可靠的分布式队列实现方式

Zookeeper可以处理两种类型的队列:

(1)同步队列

当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达

例如一个班去旅游,看是否所有人都到齐了,到齐了就发车

例如有个大任务分解为多个子任务,要所有子任务都完成了才能进入到下一流程

(2)先进先出队列

按照FIFO方式进行入队和出队

例如实现生产者和消费者模型

实现思路


01

同步队列


在zookeeper中先创建一个根目录 queue_sync,做为队列

队列的消费者监视/queue_sync/start节点,刚开始还没有这个节点,所以什么都不会做

入队操作就是在queue_sync下创建子节点,然后计算子节点的总数,看是否和队列的目标数量相同

如果相同,创建/queue_sync/start节点,由于/queue_sync/start这个节点有了状态变化,zookeeper就会通知监视者:队员已经到齐了,监视者得到通知后进行自己的后续流程

分布式队列实现思路_java

分布式队列实现思路_java_02

02

先进先出队列


在zookeeper中先创建一个根目录 queue_fifo,做为队列

入队操作就是在queue_fifo下创建自增序的子节点,并把数据放入节点内

出队操作就是先找到queue_fifo下序号最下的那个节点,取出数据,然后删除此节点

分布式队列实现思路_java_03

分布式队列实现思路_java_04