1.消息(Message)
1.1 概述
消息是RocketMQ
中的最小数据传输单元,由业务数据``+拓展属性
两部分组成。
1.2 特点
- 只读:消息一旦生成,后续将无法对其内容做出任何更改,即消费端拿到的都是只读消费视图。(由于在历史版本
3.x
和4.x
版本中消息不可变性没有强约束,因此这些版本中你是可以修改消息的) - 持久性:消费端接收到消息后会默认自动地对其进行持久化,以便后续进行故障排查。
1.3 模型关系
消息将有生产者投递到消息队列中,在消息队列中暂存,然后由消费者按照订阅关系从中获取并消费。
2.主题(Topic)
2.1 概述
主题是RocketMQ
中的顶层容器,可以视为对消息的一级分类
,用于存储同一类业务逻辑的消息。
主题是一个逻辑
概念,实际上并不会真的存在主题这一运行实体。
主题内部由多个队列组成,对于主题的属性设置实际上都是通过操作底层的队列来完成的。
2.2 注意事项
消息的消息类型必须与主题中所规定的消息类型保持一致,每个主题只绑定一种类型的消息。
2.3 模型关系
3.标签(Tag)
3.1 概述
标签可以视为子主题,即可以视为对消息的二级分类
。往往可以将属于同一业务范畴但是各自有着不同目的的消息可以以相同Topic
和不同Tag
予以标识。
4.队列(MessageQueue)
4.1 概述
RocketMQ
中存储和传递消息的容器,也是RocketMQ
中的最小存储单元。
一个Topic
下可以设置多个水平MQ
。
4.2 特点
- 有序性:消息将按照
FIFO
的顺序写入MQ
中。 - 流式操作:可在
MQ
中的指定位点处读取任意数量的消息。
5.生产者(Producer)
5.1 概述
生产者是RocketMQ中构建并投递消息到MQ的运行实体。
生产者负责将业务数据封装为符合MQ要求的消息。
1个生产者可以向n个Topic投递消息。
5.2 模型关系
6.消费者(Consumer)
6.1 概述
消费者是RocketMQ中接收并处理消息的运行实体。
消费者负责将MQ消息转换为业务可理解的信息以供后续的业务逻辑处理。
6.2 注意事项
消费者必须关联一个消费者组,因为消费者组将为消费者进行统一配置并管理其消费状态。
6.3 模型关系
7.消费者分组(ConsumerGroup)
7.1 概述
消费者分组可以视为RocketMQ
中承载同一种消费行为的负载均衡分组
。
消费者分组是一个逻辑概念,并不是一个运行实体。
7.2 特点
- 每个消费者组都消费同一份完整的消息,消费者组之间的消息消费互不影响。(例如:现在消息队列中已经有1、2、3、4、5这五个消息,消费者组A消费了1、2消息,而消费者组B则消费了1、2(同样可以消费消息1、2)、3、4消息,即它们之间的消费互不影响,消费进度亦是如此)
- 同一个消费者组内的消费者之间是竞争关系,不能重复消费同一条消息。(例如:现在消息队列中已经有1、2、3、4、5这五个消息,现在消费者a1已经消费了消息1、2,那么消费者a2再来消费时,就只能消费3、4、5了,反正它就不能再去消费消息1、2了)
7.3 模型关系
8.消费位点(Offset)
8.1 概述
由于不同消费者组之间的消息消费是互不影响的,因此,当一个消费者组读取了MQ中的消息之后,不能将该消息立即从MQ中移除。如果移除,那其他消费者组就读不到了;如果不移除,那就无法确定当前消费者组已经消费到哪了。
因此,我们通过Offset
来标识一个消费者组的当前消费位置,,每成功消费一条记录,Offset + 1
。(MQ ≈ 数组
,Offset ≈ 数组下标
)