RocketMQ介绍

2019-08-06  本文已影响0人  夜寒灯暖

RocketMQ介绍

什么是消息队列

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

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

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

产品功能

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

功能概览图

功能简介.png

多协议支持

管理工具

特色功能

专有云部署

消息收发模型

消息队列 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的全球消息路由功能依托阿里云优质基础设施实现的高速通道专线,可以高效地实现国内外不同地域之间的消息同步复制。
上一篇下一篇

猜你喜欢

热点阅读