程序员必备 | 起底RocketMQ的相关术语/概念

349 阅读4分钟

前言

最近在整理一些MQ相关的内容,顺便从头到尾过了一遍,对于初次接触MQ的小伙伴来讲,这里面的一些术语、概念还是挺多的,我这边以RocketMQ为例整理一下,防止遗忘,大家一起学习。

虽然MQ的产品很多,但是概念基本上还是一样的,懂了一个,另外一个也就通了,这个不必担心。

对于MQ适用业务场景还不太了解的同学,可以看一下这篇文章:MQ都能用来干什么?

市面上的MQ产品很多,那该如何选择呢?可以看一下这篇文章:消息队列(MQ)的产品这么多,怎么选?

如果你想安装一个,自己玩玩,那么可以看一下这两篇文章:

RocketMQ的术语/概念

概念

我整理了一个脑图,能比较清晰的了解,有需要高清原图的,关注「Hugh的白板」公众号,回复「MQ脑图」即可。

消息主题

Topic:消息主题

一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,RocketMQ的基本订阅单位

Tag:消息标签

用来进一步区分某个Topic下的消息分类,消息从生产者发出即带上的属性。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。

消息

Message:消息载体

消息队列中信息传递的载体。

Message ID

消息的全局唯一标识

Message Key

消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。

消息模型

Producer:生产者

消息生产者,也称为消息发布者,负责生产并发送消息。

Broker:消息代理

消息中转角色,负责存储消息,转发消息。

Consumer:消费者

消息消费者,也称为消息订阅者,负责接收并消费消息。

部署结构

Name Server:名字服务

主要用于存储topic,broker的关系,功能类似于zookeeper。生产者/消费者通过名字服务查找各主题相应的Broker列表。

NameServer之间互相不通信,支持集群,一个挂掉之后不会影响其他的节点。

Broker Server:代理服务器

消息中转角色,负责存储消息、转发消息

消费模式

Pull Consumer:拉取式消费

应用调用Consumer的拉取信息方法从Broker拉取消息

Push Consumer:推动式消费

Broker收到消息后主动推送给消费端,该模式实时性比较高

Group组

Producer Group:生产者组

同一类Producer的集合,这类Producer发送同一类消息且发送逻辑一致,一个 Producer Group 可以发送多个 Topic 消息。

Producer Group 还有个好处就是在发送分布式事务消息时,如果 Producer 中途意外宕机,Broker 会主动回调 Producer Group 内的任意 一台机器来确认事务状态。

Consumer Group:消费者组

同一类Consumer的集合,这类Consumer通常消费同一类消息且发送逻辑一致,一个 Consumer Group 下的多个 Consumer 以均摊方式消费消息,如果设置为广播方式,那么这个 Consumer Group 下的每个实例都消费全量数据。

消息传播模式

Clustering:集群消费

相同Consumer Group的每个Consumer实例平均分摊消息

Broadcasting:广播消费

相同Consumer Group的每个Consumer实例都会各自消费某条消息一次

消息类型

普通消息

没有特殊功能的消息

顺序消息

按照一种顺序进行发布和消费的消息类型

定时/延时消息

消息可以延迟一段特定时间进行消费。

定时消息与延时消息在代码配置上存在一些差异,但是最终达到的效果相同:消息在发送到消息队列RocketMQ版服务端后并不会立马投递,而是根据消息中的属性延迟固定时间后才投递给消费者。

定时消息和延时消息适用于以下一些场景:

  • 消息生产和消费有时间窗口要求,例如在电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条延时消息。这条消息将会在30分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成,则关闭订单。如已完成支付则忽略。
  • 通过消息触发一些定时任务,例如在某一固定时间点向用户发送提醒消息。

事务消息

二阶段事务消息,先进行prepare投递消息,此时不能进行消息消费,当二阶段发出commit或者rollback的时候才会进行消息的消费或者回滚。

以上,梳理了常用到的概念信息,比较多,慢慢理解。