为什么要用消息队列?使用场景?

一句话先记住

使用消息队列,核心是为了实现异步、解耦和削峰。

1. 为什么要用消息队列

1)异步

原来一个请求里要同步做很多事,会很慢。

比如用户注册后还要:

  • 发短信

  • 发邮件

  • 送积分

如果都同步做,用户就要一直等。

用了 MQ 后,可以先把"注册成功"这个消息发出去,主流程先返回,后面的短信、邮件、积分异步处理。

所以它能:

提升接口响应速度。

2)解耦

如果一个系统直接调用多个下游系统,耦合会很重。

比如文章发布后要:

  • 更新 ES

  • 清缓存

  • 发送通知

如果都写在主流程里,后面新增一个"推荐系统更新",就得改原来的代码。

用了 MQ 后,主业务只负责发消息,谁需要这个消息谁自己订阅。

所以它能:

让系统之间低耦合,方便扩展。

3)削峰填谷

高并发场景下,请求瞬间打到数据库或下游服务,容易把系统冲垮。

比如秒杀、抢券、下单高峰。

这时可以先把请求放进 MQ,后端慢慢消费。

所以 MQ 相当于一个缓冲区:

把瞬时高流量变成后端可承受的平稳流量。

2. 常见使用场景

场景 1:异步通知

比如:

  • 用户注册后发短信

  • 下单成功后发邮件

  • 支付成功后通知积分系统

特点是:

这些不是主链路核心步骤,适合异步。

场景 2:数据分发

比如文章发布后:

  • 更新 ES 索引

  • 清理缓存

  • 发送站内通知

一个消息发出去,多个系统各自消费。

这就是典型的事件驱动 / 数据分发

场景 3:流量削峰

比如:

  • 秒杀下单

  • 抢优惠券

  • 大促订单处理

请求先写入 MQ,再由消费者慢慢处理,保护数据库和核心服务。

3.面试回答版

使用消息队列,核心原因主要有三个:异步、解耦削峰。异步方面,比如用户注册成功后发送短信、邮件、积分发放,这些非核心流程可以放到 MQ 里异步执行,提升主流程响应速度。解耦方面,比如文章发布后需要更新 ES、清缓存、发通知,主业务不需要直接依赖这些下游系统,只需要发送一条消息,各个消费者自己订阅处理,后续扩展也更方便。削峰方面,在秒杀、抢券、大促下单这些高并发场景下,可以先把请求写入 MQ,作为缓冲区,再由后端服务按能力消费,防止数据库和下游系统被瞬时流量压垮。所以消息队列本质上就是通过异步消息通信提升系统性能、可扩展性和稳定性。

相关推荐
一定要AK1 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao1 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao2 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
迷藏4942 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
wuxinyan1233 小时前
Java面试题47:一文深入了解Nginx
java·nginx·面试题
新知图书3 小时前
搭建Spring Boot开发环境
java·spring boot·后端
冰河团队3 小时前
一个拉胯的分库分表方案有多绝望?整个部门都在救火!
java·高并发·分布式数据库·分库分表·高性能
洛_尘3 小时前
Java EE进阶:Linux的基本使用
java·java-ee
宸津-代码粉碎机3 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
MaCa .BaKa3 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发