消息队列RocketMQ版是阿里云基于Apache RocketMQ构建的低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列RocketMQ版既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。
核心概念
- Topic:消息主题,一级消息类型,生产者向其发送消息。
- 生产者:也称为消息发布者,负责生产并发送消息至Topic。
- 消费者:也称为消息订阅者,负责从Topic接收并消费消息。
- 消息:生产者向Topic发送并最终传送给消费者的数据和(可选)属性的组合。
- 消息属性:生产者可以为消息定义的属性,包含Message Key和Tag。
- Group:一类生产者或消费者,这类生产者或消费者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。
消息收发模型
消息队列RocketMQ版支持发布和订阅模型,消息生产者应用创建Topic并将消息发送到Topic。消费者应用创建对Topic的订阅以便从其接收消息。通信可以是一对多(扇出)、多对一(扇入)和多对多。
具体通信如下图所示。

- 生产者集群:用来表示发送消息应用,一个生产者集群下包含多个生产者实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个生产者对象。
一个生产者集群可以发送多个Topic消息。发送分布式事务消息时,如果生产者中途意外宕机,消息队列RocketMQ版服务端会主动回调生产者集群的任意一台机器来确认事务状态。
- 消费者集群:用来表示消费消息应用,一个消费者集群下包含多个消费者实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个消费者对象。
一个消费者集群下的多个消费者以均摊方式消费消息。如果设置的是广播方式,那么这个消费者集群下的每个实例都消费全量数据。
一个消费者集群对应一个Group ID,一个Group ID可以订阅多个Topic,如图 1中的Group 2所示。Group和Topic的订阅关系可以通过直接在程序中设置即可.
应用场景
- 削峰填谷
诸如秒杀、抢红包、企业开门红等大型活动时皆会带来较高的流量脉冲,或因没做相应的保护而导致系统超负荷甚至崩溃,或因限制太过导致请求大量失败而影响用户体验,消息队列RocketMQ版可提供削峰填谷的服务来解决该问题。
- 异步解耦
交易系统作为淘宝和天猫主站最核心的系统,每笔交易订单数据的产生会引起几百个下游业务系统的关注,包括物流、购物车、积分、流计算分析等等,整体业务系统庞大而且复杂,消息队列RocketMQ版可实现异步通信和应用解耦,确保主站业务的连续性。
- 顺序收发
细数日常中需要保证顺序的应用场景非常多,例如证券交易过程时间优先原则,交易系统中的订单创建、支付、退款等流程,航班中的旅客登机消息处理等等。与先进先出FIFO(First In First Out)原理类似,消息队列RocketMQ版提供的顺序消息即保证消息FIFO。
- 分布式事务一致性
交易系统、支付红包等场景需要确保数据的最终一致性,大量引入消息队列RocketMQ版的分布式事务,既可以实现系统之间的解耦,又可以保证最终的数据一致性。
- 大数据分析
数据在“流动”中产生价值,传统数据分析大多是基于批量计算模型,而无法做到实时的数据分析,利用阿里云消息队列RocketMQ版与流式计算引擎相结合,可以很方便的实现业务数据的实时分析。
- 分布式缓存同步
天猫双11大促,各个分会场琳琅满目的商品需要实时感知价格变化,大量并发访问数据库导致会场页面响应时间长,集中式缓存因带宽瓶颈,限制了商品变更的访问流量,通过消息队列RocketMQ版构建分布式缓存,实时通知商品数据的变化。
功能特性
概览
消息队列RocketMQ版在阿里云多个地域(Region)提供了高可用消息云服务。单个地域内采用多机房部署,可用性极高,即使整个机房都不可用,仍然可以为应用提供消息发布服务。

多协议接入
- TCP协议:区别于HTTP简单的接入方式,提供更为专业、可靠、稳定的TCP协议的SDK接入服务。支持的语言包括Java、C/C++ 以及.NET。
- HTTP协议:采用RESTful风格,方便易用,快速接入,跨网络能力强。支持Java、C++、.NET、Go、Python、Node.js和PHP七种语言客户端。
管理工具
- Web控制台:支持Topic管理、Group管理、消息查询、消息轨迹展示和查询、资源报表以及监控报警管理。
- OpenAPI:提供开放的API便于将消息队列RocketMQ版管理工具集成到自己的控制台。
消息类型
- 普通消息:消息队列RocketMQ版中无特性的消息,区别于有特性的定时和延时消息、顺序消息和事务消息。
- 事务消息:实现类似X/Open XA的分布事务功能,以达到事务最终一致性状态。
- 定时和延时消息:允许消息生产者对指定消息进行定时(延时)投递,最长支持40天。
- 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。
消息特性
- 消息重试:在消费者返回消息重试的响应后,消息队列RocketMQ版会按照相应的重试规则进行消息重投。
- 至少投递一次(At-leat-once):消息队列RocketMQ版保证消息成功被消费一次。消息队列RocketMQ版的分布式特点和瞬变的网络条件,或者用户应用重启发布的情况下,可能导致消费者收到重复的消息。开发人员应将其应用程序设计为多次处理一条消息不会产生任何错误或不一致性。
特性功能
- 消息查询:消息队列RocketMQ版提供了三种消息查询的方式,分别是按Message ID、Message Key以及Topic查询。
- 查询消息轨迹:通过消息轨迹,能清晰定位消息从生产者发出,经由消息队列RocketMQ版服务端,投递给消息消费者的完整链路,方便定位排查问题。
- 集群消费和广播消费:当使用集群消费模式时,消息队列RocketMQ版认为任意一条消息只需要被消费者集群内的任意一个消费者处理即可;当使用广播消费模式时,消息队列RocketMQ版会将每条消息推送给消费者集群内所有注册过的消费者,保证消息至少被每台机器消费一次。
- 重置消费位点:根据时间或位点重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。
- 死信队列:将无法正常消费的消息储存到特殊的死信队列供后续处理。
- 全球消息路由:用于全球不同地域之间的消息同步,保证地域之间的数据一致性。
- 资源报表:消息生产和消费数据的统计功能。通过该功能,您可查询在一段时间范围内发送至某Topic的消息总量或者TPS(消息生产数据),也可查询在一个时间段内某Topic投递给某Group ID的消息总量或TPS(消息消费数据)。
- 监控报警:您可使用消息队列RocketMQ版提供的监控报警功能,监控某Group ID订阅的某Topic的消息消费状态并接收报警短信,帮助您实时掌握消息消费状态,以便及时处理消费异常。
产品架构
消息队列RocketMQ版在任何一个环境都是可扩展的,生产者必须是一个集群,消息服务器必须是一个集群,消费者也同样。集群级别的高可用,是消息队列RocketMQ版跟其他的消息服务器的主要区别,消息生产者发送一条消息到消息服务器,消息服务器会随机的选择一个消费者,只要这个消费者消费成功就认为是成功了。
系统部署架构

图中所涉及到的概念如下所述:
- Name Server:是一个几乎无状态节点,可集群部署,在消息队列RocketMQ版中提供命名服务,更新和发现Broker服务。
- Broker:消息中转角色,负责存储消息,转发消息。分为Master Broker和Slave Broker,一个Master Broker可以对应多个Slave Broker,但是一个Slave Broker只能对应一个Master Broker。Broker启动后需要完成一次将自己注册至Name Server的操作;随后每隔30s定期向Name Server上报Topic路由信息。
- 生产者:与Name Server集群中的其中一个节点(随机)建立长链接(Keep-alive),定期从Name Server读取Topic路由信息,并向提供Topic服务的Master Broker建立长链接,且定时向Master Broker发送心跳。
- 消费者:与Name Server集群中的其中一个节点(随机)建立长连接,定期从Name Server拉取Topic路由信息,并向提供Topic服务的Master Broker、Slave Broker建立长连接,且定时向Master Broker、Slave Broker发送心跳。Consumer既可以从Master Broker订阅消息,也可以从Slave Broker订阅消息,订阅规则由Broker配置决定。