本文从功能、稳定性、性能、Exchange和Queue等几个方面对比阿里云消息队列RabbitMQ版与开源RabbitMQ。
功能
项目 | 消息队列RabbitMQ版 | 开源RabbitMQ |
---|---|---|
客户端SDK支持情况 | 支持开源所有语言和所有版本的SDK。 | 开源SDK。 |
定时消息 | 秒级精确度。兼容插件x-delayed-message用法和TTL两种使用方式。更多信息,请参见延时消息。 | 通过插件或使用消息存活时间过期转移方式实现。 |
事务消息 | 不支持。 | 支持。 |
消息重试机制 | 消息消费超过一定时间未响应会重新投递。超时时间和重试次数的详细解释,请参见消息重试。 | 无消息重试机制。无法跳过有问题消息的消费处理,无法处理新生产的消息,从而会导致消息大量堆积引起内存问题,导致消息服务宕机。 |
可观测能力:Dashboard |
详细信息,请参见Dashboard。 |
支持以下两种方案:
|
可观测能力:消息轨迹 |
详细信息,请参见消息轨迹。 |
消息轨迹信息以文本格式存储在服务器的log文件中,查询和定位问题效率较低。 |
稳定性
项目 | 消息队列RabbitMQ版 | 开源RabbitMQ |
---|---|---|
海量消息堆积能力 | 海量消息堆积能力,高性能不受消息堆积影响。 | 抗堆积能力差,容易引发内存问题而导致宕机。 |
弹性能力 | 集群分布式无主架构,能够横向快速地扩缩容集群规模。 | 通过变更机器规格来扩容、缩容。 |
服务可用性 | 99.95%集群分布式高可用架构,多可用区高可用。 | Erlang语言,运维靠经验摸索,且无法避免开源架构的稳定性痛点。 |
数据可靠性 | 数据三副本,不会影响TPS性能。 | 配置副本数变多会导致TPS下降。 |
巡检系统 | 自动发现并修复死锁、宕机等问题。 | 无。 |
性能
项目 | 消息队列RabbitMQ版 | 开源RabbitMQ |
---|---|---|
集群TPS上限 | 无上限。消息队列RabbitMQ版采用集群分布式部署,无主架构,能够横向扩容、缩容集群规模。 | 有上限。受机器性能限制,扩容依赖升级机器硬件规格,且有上限。 |
单个Queue的TPS上限 | 无上限。消息队列RabbitMQ版支持单队列的横向扩展,性能上无并发限制,容量无上限。 | 有上限,单队列性能上限为单节点上限。 |
连接数 | 无上限。消息队列RabbitMQ版实例能承载的连接数可随集群规模扩大而增加,不受连接数增加的影响。 | 有上限。受机器性能限制,单机的连接数有上限,且无法扩容。 |
定时消息 | 秒级精确度、高性能、开箱即用。 | 使用复杂。 |
Exchange和Queue
项目 | 消息队列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 | 支持。 | 支持。 |
项目 | 消息队列RabbitMQ版 | RabbitMQ |
---|---|---|
队列类型 | 无需配置,分布式高可用集群。 | 需配置。
|
节点 | 无需配置,服务免运维。 | 需配置,可选择节点。 |
是否持久化 | 支持持久化和非持久化。 | 支持持久化和非持久化。 |
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 | 不支持。 | 支持。 |