消息队列(MQ)入门笔记

很多新人第一次学后端:

听到:

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

几乎属于经典组合。

相关推荐
atomicmaker5 小时前
进程/线程?并发/并行?
经验分享·笔记·其他
专注VB编程开发20年5 小时前
python运行提速方案全解
java·linux·服务器
涤生大数据5 小时前
大数据面试高频题:row_number() 数据倾斜到底怎么解决?
java·大数据·面试
weixin_446729165 小时前
注解和反射
java·开发语言
摇滚侠6 小时前
HashMap 源码解析 底层原理 面试如何回答
java·面试·职场和发展
凯瑟琳.奥古斯特6 小时前
常见加密算法及应用
java·开发语言·网络·网络协议·职场和发展
devilnumber6 小时前
java的lambda妙用举例
java·lambda
invicinble6 小时前
springboot提供的机制大全
java·spring boot·后端
Han_han9196 小时前
题⽬ 4:订单商品统计:
java