本文从功能、稳定性、性能、Exchange和Queue等几个方面对比阿里云消息队列RabbitMQ版与开源RabbitMQ。

功能

项目 消息队列RabbitMQ版 开源RabbitMQ
客户端SDK支持情况 支持开源所有语言和所有版本的SDK。 开源SDK。
定时消息 秒级精确度。兼容插件x-delayed-message用法和TTL两种使用方式。更多信息,请参见延时消息 通过插件或使用消息存活时间过期转移方式实现。
事务消息 不支持。 支持。
消息重试机制 消息消费超过一定时间未响应会重新投递。超时时间和重试次数的详细解释,请参见消息重试 无消息重试机制。无法跳过有问题消息的消费处理,无法处理新生产的消息,从而会导致消息大量堆积引起内存问题,导致消息服务宕机。
可观测能力:Dashboard
  • 指标丰富,维度可精确到Vhost、Exchange和Queue,便于您快速发现和定位问题。
  • 基于Prometheus+Grafana实现指标的采集和展示,开箱即用,开发成本低。

详细信息,请参见Dashboard

支持以下两种方案:
  • 方案一:通过Management UI能够获取丰富的指标,但需要自建指标存储及展示的系统。
  • 方案二:通过Prometheus+Grafana实现,该方案获取的指标较简单,维度不够精确,不利于快速定位业务问题。
可观测能力:消息轨迹
  • 轨迹数据白屏化展示,消息完整的生命周期清晰可见,一目了然。
  • 提供强大的索引能力,可根据Queue、消息ID、消息处理耗时等完成不同维度的查询。

详细信息,请参见消息轨迹

消息轨迹信息以文本格式存储在服务器的log文件中,查询和定位问题效率较低。

稳定性

项目 消息队列RabbitMQ版 开源RabbitMQ
海量消息堆积能力 海量消息堆积能力,高性能不受消息堆积影响。 抗堆积能力差,容易引发内存问题而导致宕机。
弹性能力 集群分布式无主架构,能够横向快速地扩缩容集群规模。 通过变更机器规格来扩容、缩容。
服务可用性 99.95%集群分布式高可用架构,多可用区高可用。 Erlang语言,运维靠经验摸索,且无法避免开源架构的稳定性痛点。
数据可靠性 数据三副本,不会影响TPS性能。 配置副本数变多会导致TPS下降。
巡检系统 自动发现并修复死锁、宕机等问题。 无。

性能

项目 消息队列RabbitMQ版 开源RabbitMQ
集群TPS上限 无上限。消息队列RabbitMQ版采用集群分布式部署,无主架构,能够横向扩容、缩容集群规模。 有上限。受机器性能限制,扩容依赖升级机器硬件规格,且有上限。
单个Queue的TPS上限 无上限。消息队列RabbitMQ版支持单队列的横向扩展,性能上无并发限制,容量无上限。 有上限,单队列性能上限为单节点上限。
连接数 无上限。消息队列RabbitMQ版实例能承载的连接数可随集群规模扩大而增加,不受连接数增加的影响。 有上限。受机器性能限制,单机的连接数有上限,且无法扩容。
定时消息 秒级精确度、高性能、开箱即用。 使用复杂。

Exchange和Queue

表 1. Exchange
项目 消息队列RabbitMQ版 开源RabbitMQ
Exchange类型 支持direct、fanout、headers、topic、x-delayed-message、x-consistent-hash这几种类型。 支持direct、fanout、headers、topic、x-delayed-message、x-consistent-hash这几种类型。
持久化 支持配置持久化与非持久化。 支持配置持久化与非持久化。
Auto Delete 支持。 支持。
Internal 支持。 支持。
Alternate exchange 支持。 支持。
Consistent hash exchange 支持。 支持。
表 2. Queue
项目 消息队列RabbitMQ版 RabbitMQ
队列类型 无需配置,分布式高可用集群。 需配置。
  • Classic:经典镜像队列。
  • Quorum:仲裁队列。
节点 无需配置,服务免运维。 需配置,可选择节点。
是否持久化 支持持久化和非持久化。 支持持久化和非持久化。
Max length 无需配置,支持海量消息堆积。 需配置,防止消息堆积过多而引起的内存问题导致宕机。
Max length bytes
Max in memory length
Max in memory bytes
Delivery limit 无需配置,固定值,默认16次。消息重试机制,请参见消息重试 需配置。
Dead letter exchange 支持。 支持。
Dead letter routing key 支持。 支持。
Single active consumer 不支持。 支持。