很多新人第一次学后端:
听到:
txt
RabbitMQ
Kafka
RocketMQ
会特别懵。
感觉:
txt
怎么突然又冒出来一个"队列"
其实:
消息队列真正核心思想:
并不复杂。
一句话:
txt
让系统之间异步通信
一、什么是消息队列(MQ)
MQ:
全称:
txt
Message Queue
中文:
txt
消息队列
你可以理解成:
txt
存消息的中转站
二、为什么需要 MQ
先看最普通情况。
用户下单
传统流程:
txt
用户下单
↓
订单系统
↓
数据库
↓
短信服务
↓
邮件服务
↓
库存服务
↓
积分服务
三、问题在哪
如果:
短信服务挂了:
txt
整个下单可能卡住
邮件慢:
txt
用户一直等
系统之间:
txt
耦合非常严重
四、MQ 的核心思想
把:
txt
"直接调用"
变成:
txt
"发消息"
五、引入 MQ 后
流程变成:
txt
用户下单
↓
订单系统
↓
发消息到 MQ
↓
立刻返回用户
然后:
短信系统自己消费
邮件系统自己消费
库存系统自己消费
积分系统自己消费
六、为什么叫"队列"
因为:
消息会:
txt
排队
例如:
txt
消息1
消息2
消息3
消费者:
一个一个处理。
七、MQ 最核心作用(必须掌握)
消息队列:
最核心:
只有三个作用。
八、作用1:解耦(最重要)
系统之间:
不再:
txt
直接调用
而是:
txt
通过 MQ 通信
没有 MQ
txt
订单系统
↓
直接调用短信系统
短信挂了:
订单也可能受影响。
有 MQ
txt
订单系统
↓
发消息
↓
MQ
↓
短信系统自己处理
订单系统:
根本不用管短信系统。
九、作用2:异步(重点)
很多操作:
其实:
txt
不需要立刻完成
例如:
- 发短信
- 发邮件
- 积分统计
- 日志分析
这些:
都可以:
txt
慢慢处理
十、为什么异步会快
传统:
txt
用户必须等所有操作完成
MQ:
txt
先返回用户
后面再慢慢处理
所以:
体验:
会快很多。
十一、作用3:削峰(高并发重点)
例如:
双11。
突然:
txt
10万人同时下单
数据库:
可能直接炸。
十二、MQ 如何削峰
MQ:
先把请求:
txt
缓存到队列
后端:
慢慢消费。
类比
食堂打饭:
没队列
txt
10万人一起冲窗口
直接崩。
有队列
txt
排队
一个一个来
系统稳定很多。
十三、MQ 核心概念(必须掌握)
MQ 最核心:
只有:
txt
生产者
消费者
队列
十四、生产者(Producer)
负责:
txt
发送消息
例如:
订单系统。
十五、消费者(Consumer)
负责:
txt
处理消息
例如:
短信服务。
十六、队列(Queue)
负责:
txt
存消息
十七、完整流程(重点)
txt
生产者
↓
发送消息
↓
消息队列
↓
消费者
↓
处理消息
十八、最经典案例(订单系统)
用户下单
订单系统:
txt
创建订单
然后:
txt
发送:
"用户下单成功"
到 MQ。
其他系统
看到消息后:
分别处理:
库存系统
txt
扣库存
短信系统
txt
发短信
积分系统
txt
增加积分
十九、RabbitMQ
最经典 MQ 之一。
特点:
txt
简单
稳定
容易学
Go 后端:
非常常见。
二十、Kafka
Kafka:
特点:
txt
超高吞吐
大数据
日志流
互联网大厂:
大量使用。
二十一、RocketMQ
阿里开源。
特点:
txt
事务消息强
电商场景多
二十二、为什么 Go 项目经常配 MQ
真实项目:
不可能:
txt
所有事情同步执行
否则:
系统会:
txt
又慢又脆弱
所以:
txt
Gin + MySQL + Redis + MQ
是非常经典组合。
二十三、同步 vs 异步(必须理解)
同步
txt
你做完
我才能继续
例如:
打电话。
异步
txt
你先去做
做完通知我
例如:
发微信。
二十四、MQ 本质就是异步
核心思想:
txt
发送消息后
先不等结果
后面:
消费者:
慢慢处理。
二十五、为什么消息不会丢
MQ:
会:
txt
先存消息
消费者:
处理成功后:
才删除。
二十六、ACK(确认机制)
消费者:
处理成功:
会告诉 MQ:
txt
我处理完了
这叫:
txt
ACK
二十七、如果消费者崩了
MQ:
发现:
txt
没ACK
就会:
txt
重新投递消息
二十八、消息重复怎么办
所以:
真实开发:
消费者:
必须:
txt
幂等
二十九、什么是幂等
例如:
txt
扣库存
同一消息:
来两次。
不能:
txt
扣两次
三十、为什么 MQ 很重要
因为:
现代系统:
本质:
已经不是:
txt
单体应用
而是:
txt
多个服务协作
MQ:
就是:
txt
服务之间的中间人
三十一、真实项目中的 MQ 场景
非常多。
例如:
电商
- 下单
- 扣库存
- 发优惠券
社交
- 发通知
- 点赞
- 推送
视频平台
- 转码
- 审核
- 推荐
日志系统
- 日志采集
- 数据分析
三十二、第一阶段学 MQ 学什么
不要一开始:
就研究:
txt
集群
事务消息
延迟队列
死信队列
先掌握:
txt
1. 什么是MQ
2. 为什么需要MQ
3. 生产者
4. 消费者
5. 队列
6. 同步 vs 异步
就够了。
三十三、最后一句总结
消息队列本质:
txt
系统之间的异步通信中间件
核心作用:
txt
解耦
异步
削峰
核心结构:
txt
生产者
↓
消息队列
↓
消费者
现代后端开发:
txt
Gin + MySQL + Redis + MQ
几乎属于经典组合。