AMQP-0-9-1版本RabbitMQ与开源RabbitMQ的差异
AMQP-0-9-1版本RabbitMQ是一款基于高可用分布式存储架构实现的AMQP 0-9-1协议的消息产品,能够兼容开源的RabbitMQ客户端。与开源RabbitMQ相比,能够解决各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
以下从功能、稳定性、Exchange和Queue几个方面给出具体的对比分析,供用户选型参考。
功能
功能项 |
AMQP-0-9-1版本 |
开源RabbitMQ |
---|---|---|
客户端SDK |
支持开源所有语言和所有版本的SDK。 |
支持开源SDK。 |
定时消息 |
支持任意定时时间,秒级精确度,海量堆积。 |
通过插件或使用消息存活时间过期转移方式实现。 |
事务消息 |
不支持。 |
支持。 |
顺序消息 |
不支持。 |
支持。 |
消息优先级 |
支持。 |
支持。 |
消息重试机制 |
支持。消息消费超过一定时间未响应会重新投递。重试间隔时间为1分钟,最多重试16次,超过则会丢弃或发送至死信Exchange。 |
不支持。 |
监控指标 |
指标丰富,维度可精确到Vhost、Exchange和Queue,便于您快速发现和定位问题。 |
支持以下两种方案:
|
消息轨迹 |
轨迹数据白屏化展示,消息完整的生命周期清晰可见,一目了然。提供强大的索引能力,可根据Queue、消息ID、消息处理耗时等完成不同维度的查询。 |
消息轨迹信息以文本格式存储在服务器的log文件中,查询和定位问题效率较低。 |
稳定性
功能项 |
AMQP-0-9-1版本 |
开源RabbitMQ |
---|---|---|
消息堆积 |
海量消息堆积能力,高性能不受消息堆积影响。 |
抗堆积能力差,容易引发内存问题而导致宕机。 |
弹性能力 |
集群分布式无主架构,能够横向快速地扩容集群规模。 |
通过变更机器规格来扩容、缩容。 |
服务可用性 |
99.95%集群分布式高可用架构,多可用区高可用。 |
使用Erlang语言开发,运维靠经验摸索,且无法避免开源架构的稳定性痛点。 |
数据可靠性 |
数据三副本,不会影响TPS性能。 |
配置副本数变多会导致TPS下降。 |
巡检系统 |
自动发现并修复死锁、宕机等问题。 |
无。 |
Exchange
功能项 |
AMQP-0-9-1版本 |
开源RabbitMQ |
---|---|---|
Exchange类型 |
支持的类型:direct、fanout、headers、topic、x-delayed-message、x-consistent-hash。 |
支持的类型:direct、fanout、headers、topic、x-delayed-message、x-consistent-hash。 |
持久化 |
默认持久化。 |
支持配置持久化与非持久化。 |
自动删除 |
支持。 |
支持。 |
Internal |
不支持。 |
支持。 |
Alternate exchange |
不支持。 |
支持。 |
Consistent hash exchange |
支持。 |
支持。 |
Queue
功能项 |
AMQP-0-9-1版本 |
开源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 |
不支持。 |
支持。 |