什么是消息队列 RocketMQ?

消息队列 RocketMQ 是阿里巴巴集团自主研发的专业消息中间件,基于高可用分布式集群技术,提供消息订阅和发布、消息轨迹查询以及定时(延时)消息、资源统计、监控报警等一系列消息云服务,是企业级互联网架构的核心产品。 消息队列 RocketMQ 历史超过9年,为分布式应用系统提供异步解耦、削峰填谷的能力,同时具备海量消息堆积、高吞吐、可靠重试等互联网应用所需的特性,是阿里巴巴双11使用的核心产品。

消息队列 RocketMQ 是阿里云正式商用的产品,目前在阿里云多个地域(Region)提供了高可用消息云服务,单个域内采用多机房部署,可用性极高,即使整个机房都不可用,仍然可以为应用提供消息发布服务,产品稳定性及可用性完全按照阿里巴巴内部标准来实施,无单点。

消息队列 RocketMQ 目前提供 TCP 和 HTTP 协议层面的接入方式,支持 Java、C++、 .NET、Go、Python、Nodejs、PHP 这七种编程语言,方便不同编程语言开发的应用快速接入消息队列 RocketMQ 消息云服务。 用户可以将应用部署在阿里云 ECS、企业自建云,或者嵌入到移动端、物联网设备中与消息队列 RocketMQ 建立连接进行消息收发,同时本地开发者也可以通过公网接入消息队列 RocketMQ 服务进行消息收发。

产品功能

消息队列 RocketMQ 提供了基于 TCP 和 HTTP 协议的多种编程语言的接入方式以及多维度的管理工具,同时针对不同的应用场景提供了一系列的特色功能。

功能概览图

http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/29532/cn_zh/1553936362494/%E5%8A%9F%E8%83%BD%E7%AE%80%E4%BB%8B.PNG

产品功能

多协议支持

  • 支持 HTTP 协议:采用 RESTful 标准,方便易用,快速接入,跨网络能力强,并支持七种语言客户端。

  • 支持 TCP 协议:区别于 HTTP 简单的接入方式,提供更为专业、可靠、稳定的 TCP 协议的 SDK 接入。

  • 支持 STOMP 协议:类似于 HTTP 的纯文本的协议机制,常用于脚本语言(如 Ruby、Python、Perl)和消息队列 RocketMQ Broker 进行轻量级交互。

管理工具

  • Web 控制台:支持 Topic 管理、生产者管理、消费者管理、消息查询、消息轨迹展示和查询、资源报表以及监控报警管理。

  • OpenAPI:提供 API 便于将消息队列 RocketMQ 管理工具集成到自己的控制台。

  • mqadmin 命令集:专有云输出提供一套丰富的管理命令集,以命令方式对消息队列 RocketMQ 服务进行管理。

特色功能

  • 事务消息:实现类似 X/Open XA 的分布事务功能,以达到事务最终一致性状态。

  • 定时(延时)消息:允许消息生产者指定消息进行定时(延时)投递,最长支持 40 天。

  • 大消息:支持最大 4 MB 消息。

  • 消息轨迹:通过消息轨迹,能清晰定位消息从发布者发出,经由消息队列 RocketMQ 服务端,投递给消息订阅者的完整链路,方便定位排查问题。

  • 广播消费:允许同一个 Group ID 所标识的所有 Consumer 都各自消费某条消息一次。

  • 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。

  • 重置消费进度:根据时间重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。

  • 死信队列:将无法正常消费的消息储存到特殊的死信队列供后续处理。

  • 全球消息路由:用于全球不同地域之间的消息同步复制,保证地域之间的数据一致性。

专有云部署

  • 专家定制:提供技术方案设计;专家现场技术支持与培训。

  • 灵活部署:支持专有云独立部署,同时支持混合云架构。

  • 运维管控:专有云支持 mqadmin 命令集、Open API 运维管理工具,方便管控平台集成以及统一运维。

消息收发模型

消息队列 RocketMQ 支持“发布/订阅”模型,消息发布者(生产者)可以将一条消息发送服务端的某个主题(Topic), 多个消息接收方(消费者)订阅这个主题以接收该消息,如下图所示:

http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/29532/cn_zh/1541659862213/pub-sub%20model.png

Pub-Sub模型

关于消息队列 RocketMQ 涉及的概念的详细解释,请参见名词解释。