1、基本含义
队列其实可以通过数组来实现的。可以用一个抽象数组来描述一个队列。
为了实现队列功能,可以给数组添加两个指针变量:
一个称为头指针,它指示当前消费的位置,例如图中0-2三个元素已经消费出队列了。每次消费一个元素,头指针的值加1。
一个称为尾指针,表示下一个入队列的位置,每次生产者生产一个元素或是入队列一个元素,尾指针就会加1
队列的特性要求,尾指针的值必须大于等于头指针的值,如果两种是相等的 ,表示当前队列为空。
如果两者不相等,那么尾指针的值减去头指针的值的差值就是当前队列中未消费元素的个数。
在正式的队列术语当中,通常把头指针的记录值称为消费偏移量,把尾指针记录的值称为生产偏移量。
2、语义
一般有两种:Queue和Topic(Fanout)语义
简单可以理解为:
- Queue语义是一个队列只支持一个消费者
- Topic语义(扇出Fanout)是一个队列可以支持多个消费者,并且这些消费者各自独立消费互不干涉.
如果用数组来实现队列的话,Queue语义是支持一个头指针,而Topic语义是支持多个相互独立的头指针,这就是是很多开源队列的消费组ConsumerGroup的基础。