顺序消费

更新时间:

本文主要介绍云消息队列 RabbitMQ 版的顺序消费实现原理,与开源RabbitMQ的不同之处,以及其配置方式和使用限制。

顺序消费实现原理

RabbitMQ的顺序消费需要“顺序存储”和“单一消费者”两个条件同时满足才能实现。

开源 RabbitMQ 实现

  • 单一消费者:开源支持Single Active Consumer模式或Exclusive Consumer模式两种使用方式,开源社区更推荐Single Active Consumer模式。

  • 顺序存储:开源RabbitMQ的同一个Queue上的消息读写只会集中在一个节点,所以天然支持存储顺序性。

云消息队列 RabbitMQ 版实现

  • 单一消费者:云消息队列 RabbitMQ 版支持开源社区推荐的Single Active Consumer模式。

  • 顺序存储:云消息队列 RabbitMQ 版采用存算分离的分布式架构,同一Queue 的消息分布在多个节点的多个分区中。但计算节点会从存储节点读取这些分区的消息,进行归并排序后再返回给消费者,从而实现与开源版本一样的顺序消费语义。

存算分离、分布式架构下的顺序消费实现原理

image

如上图所示,Single Active Consumer模式的队列只有一个连接是活跃(Active)的,其它连接都是非活跃的(Inactive)。负责活跃连接的计算节点拉取所有存储节点上的消息,将消息排序后再投递给消费者。

由于消息在计算节点中被排序,因此计算节点会临时持有一部分消息。当活跃消费者在多个计算节点间漂移时,这部分缓存消息将会在稍后重新进入消费队列。

云消息队列 RabbitMQ 版优势

  • 高并发与扩展云消息队列 RabbitMQ 版在高并发写入性能上维持多分区的优势,同时具备卓越的横向扩展能力。

  • 高可用性机制云消息队列 RabbitMQ 版支持多个消费者与多个计算节点的连接,实现高可用性。当任一消费者或计算节点发生故障时,系统能够快速切换至其他节点提供服务。

启用方式

要启用顺序消费,必须将队列配置为Single Active Consumer模式。在创建队列时,将参数x-single-active-consumer设置为true 。

重要

启用该模式后,服务器会对队列中的消息进行排序后再投递给消费者,这可能导致消费速率降低。因此,请根据具体业务需求谨慎评估是否开启此功能。