RocketMQ介绍
什么是消息队列
消息队列RocketMQ是阿里巴巴集团自主研发的专业消息中间件,基于高可用分布式集群技术,提供消息订阅和发布、消息轨迹查询以及定时(延时)消息、资源统计、监控报警等一系列消息云服务,是企业级互联网架构的核心产品。消息队列RocktMQ历史超过9年,为分布式应用系统提供异步解耦、削峰填谷的能力,同时具备海量消息堆积,高吞吐、可靠重试等互联网应用所需的特性,是阿里巴巴双11使用的核心产品。
消息队列RocketMQ是阿里云正式商用的产品,目前在阿里多个地域(Region)提供了高可用消息云服务,单个域内采用多机房部署,可用性极高,即使整个机房不可用,任然可以为应用提供消息发布服务,产品稳定性及可用性完全按照阿里巴巴内部标准来实施,无单点。
消息队列RocketMQ目前提供TCP和HTTP协议层面的接入方式,支持Java,C++,.NET、Go、Python、Nodejs,PHP这七种编程语言,用户可以将应用部署在阿里云ECS,企业自建云,或者嵌入到移动端、物联网设备中与消息队列RocketMQ建立连接进行消息收发,同时本地开发者也可以通过公网接入消息队列RocketMQ服务进行消息收发
产品功能
消息队列 RocketMQ 提供了基于TCP和HTTP协议的多种编程语言的接入方式以及多维度的管理工具,同时针对不同的应用场景提供了一系列的特色功能。
功能概览图
功能简介.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天
- 大消息: 支持最大4MB消息
- 轨迹消息: 通过消息轨迹,能清晰定位消息从发布者发出,经由消息队列RocketMQ服务端,投递给消息订阅者的完整链路,方便定位排查问题
- 广播消费:允许同一个Group ID所标识的所有consumer都各自消费某条消息一次。
- 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。
- 重置消费进度:根据时间重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。
- 死信队列:将无法正常消费的消息存储到特殊的死信队列供后续处理
- 全球消息路由:用于全球不同地域之间的消息同步复制,保证地域之间的数据一致性。
专有云部署
消息收发模型
消息队列 RocketMQ 支持“发布/订阅”模型,消息发布者(生产者)可以将一条消息发送服务端的某个主题(topic),多个消息接收方(消费者)订阅这个主题以接收该消息,如下图所示:
pub-sub model.png名词解释
名词 | 名称 | 含义 |
---|---|---|
Topic | 消息主题 | 一级消息类型,通过Topic对消息进行分类。 |
Message | 消息 | 消息队列中信息传递的载体 |
Message ID | 消息的全局的唯一标识 | 由消息队列RocketMQ系统自动生成, 唯一标识某条消息 。 |
Message Key | 消息的业务标识 | 由消息生产者(Producer)设置,唯一标识某个业务逻辑 |
Tag | 消息标签 | 二级消息类型,用于进一步区分某个topic下的消息分类 |
Producer | 消息生产者 | 也称消息发布者,负责生产并发送消息 |
Producer实例 | Producer的一个对象实例 | 不同的Producer实例可以运行在不同进程内或者不同机器上。Producer实例线程安全。可在同一进程内多线程之间共享 |
Consumer | 消息消费者 | 也称消息订阅者,负责接收并消费消息 |
Consumer 实例 | Comsumer的一个对象实例 | 不同的Consumer实例可以运行在不同进程内或者不同机器上。一个Consumer实例内配置线程池消费消息。 |
Group | 一类Producer或者Consumer | 这类Producer或者Consumer通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。 |
Group ID | Group 的标识 | - |
队列 | 每个Topic下会由 一到多个队列来存储消息。 |
每个Topic对应队列数与消息类型以及实例所处地域(Region)相关,具体的队列数可提交工单自诩。 |
Exactly-Once投递语义 | Exactly-Once投递语义 | 是指发送到消息系统的消息只能被Consumer处理且仅处理一次,即使Consumer重试消息发送导致某个消息重复投递,该消息在Consumer也只被消费一次。 |
集群消费 | - | 一个Group ID所标识的所有Consumer平均分摊消费消息。 例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在集群消费模式下每个实例平均分摊,只消费其中的3个消息。 |
广播消费 | - | 一个Group ID所标识的所有Consumer都会各自消费某一条消息一次。例如某个Topic有9个消息,那么在广播消费模式下每个实例都会各自消费9条消息。 |
定时消息 | 定时消息 | Producer 将消息发送到消息队列RocketMQ服务端,但并不期望这条消息立马投递,而是推迟到当前时间点之后的某个时间投递到Consumer进行消费,该消息即定时消息。 |
延时消息 | 延时消息 | Producer 件消息发送到消息队列RocketMQ服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到Consumer进行消费,该消息及延时消息。 |
事务消息 | 事务消息 | 消息队列RocketMQ提供类似X/open XA的分布事务功能,通过消息队列RocketMQ的事务消息能达到分布式事务的最终一致。 |
顺序消息 | 顺序消息 | 消息队列RocketMQ提供的一种按照顺序进行发布和消费的消息类型,分为全局顺序消息和分区顺序消息。 |
全局顺序消息 | 全局顺序消息 | 对于一个Topic,所有消息按照严格的先入先出(FIFO)的顺序进行发布和消费。 |
分区顺序消息 | - | 对于指定的一个Topic,所有消息根据Sharding Key进行区块分区。同一个分区内的消息按照严格的FIFO顺序进行发布和消费。 Sharding Key是顺序消息中用来区分不同分区的关键字段,和普通消息的Message Key是完全不同的概念。 |
消息堆积 | - | Producer已经将消息发送到消息队列RocketMQ的服务端,但由于Consumer消费能力有限,未能在短时间内将所有消息正确消费掉,此时在消息队列RocketMQ的服务端保存着未被消费的消息,该状态即消息堆积。 |
消息过滤 | - | Consumer可以根据消息标签(Tag)对消息进行过滤,确保Consumer最终只接收过滤后的消息类型。消息过滤在消息队列的RocketMQ的服务端完成。 |
消息轨迹 | - | 在一条消息从Producer发出到Consumer消费处理过程中,由各个相关节点的时间、地点等数据汇聚而成的完整链路信息。通过消息轨迹,您能清晰定位消息从Producer发出,经由消息队列RocketMQ服务端,投递给Consumer的完整链路,方便定位排查问题。 |
重置消费位点 | - | 以时间轴为坐标,在消息持久存储的时间范围内(默认3天),重新设置Consumer对已订阅的Topic的消费进度,设置完成后Consumer将接收设定时间点之后有Producer发送到消息队列RocketMQ服务端的消息。 |
死信队列 | - | 死信队列用于处理无法被正常消费的消息。当一条消息初次消费失败,消息队列RocketMQ会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明Consumer在正常情况下无法正确消费此消息。此时,消息队列RocketMQ不会立刻将消息丢弃,而是将这条消息发送到该Consumer对应的特殊队列中。 消息队列RocketMQ将这种正常情况下无法被消费的消息称为死信消息(Dead-Letter Message) |
消息路由 | - | 消息路由常用于不同地域之间的消息同步,保证地域之间的数据一致性。消息队列RocketMQ的全球消息路由功能依托阿里云优质基础设施实现的高速通道专线,可以高效地实现国内外不同地域之间的消息同步复制。 |
网友评论