NSQ源码分析(四)——inFlightPqueue和PriorityQueue优先级队列

在Channel结构体中用到了两种优先级队列pqueue.PriorityQueue和inFlightPqueue。

deferredMessages map[MessageID]*pqueue.Item
deferredPQ       pqueue.PriorityQueue
deferredMutex    sync.Mutex
 
inFlightMessages map[MessageID]*Message
inFlightPQ       inFlightPqueue
inFlightMutex    sync.Mutex

       其中deferredMessages和inFlightMessages 使用map储存了MessageID和Message的对应关系,用于根据MessageID获取对应的Message。而deferredPQ和inFlightPQ是两种优先级队列。deferredPQ队列中储存了延时消息和消息投递失败需要等待指定时间后重新投递的消息,inFlightPQ队列中储存了正在投递但还没确认投递成功的消息。

 

一、PriorityQueue优先级队列

       源码位置在 nsq/internal/pqueue/pqueue.go文件中

      

PriorityQueue实现了Golang源码包heap中的接口,是最小堆。在了解PriorityQueue之前需要先对堆的概念有了解,可以参考:

https://blog.csdn.net/skh2015java/article/details/83183681

PriorityQueue队列中储存的是Item指针,Item结构体及字段说明如下:


版权声明:本文为simanstar原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。