如下从功能维度上介绍几种常见的队列

  • 优先级队列
    优先级高的消息具备优先被消费的特权,这样可以为下游提供不同消息级别的保证。不过这个优先级也是需要有一个前提的:如果消费者的消费速度大于生产者的速度,并且消息中间件服务器(一般简单的称之为Broker)中没有消息堆积,那么对于发送的消息设置优先级也就没有什么实质性的意义了,因为生产者刚发送完一条消息就被消费者消费了,那么就相当于Broker中至多只有一条消息,对于单条消息来说优先级是没有什么意义的。
  • 延迟队列
    消息被发送以后,并不想消费者立刻拿到消息,而是等待特定的时间,消费者才能拿到这个消息进行消费
  1. 基于消息延迟
    为每条消息设置不同的延迟时间,那么队列中每当有新的消息进入时,会重新根据延迟时间排序。这会对性能产生较大的影响
  2. 基于队列延迟
    设置不同延迟级别的队列,每个队列中消息延迟时间都是相同的。
    这样免去了延迟排序所要承受的性能之苦,通过一定的扫描策略,可以投递超时的消息。
  • 死信队列
    由于某些原因消息无法被正确的投递,为了确保消息不会被无故的丢弃,一般将其置于一个特殊角色的队列,这个队列一般称之为死信队列。
  • 重试队列
    是一种回退队列,指消费端消费失败时,为防止消息无故丢失而将消息回滚到brocker中。
    重试队列一般分多个等级,每个重试等级也会设置重新投递延时,重新投递次数越多,延时越大。
    为此需要设置一个上限,超过投递次数就加入死信队列。

重试队列和延时队列的比较
延迟队列动作由内部触发。
重试队列动作由外部消费端触发
延迟队列作用一次,重试队列作用范围会向后传递。