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