前言
最近在整理一些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的时候才会进行消息的消费或者回滚。
以上,梳理了常用到的概念信息,比较多,慢慢理解。