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

一句话先记住

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

1. 为什么要用消息队列

1)异步

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

比如用户注册后还要:

  • 发短信

  • 发邮件

  • 送积分

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

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

所以它能:

提升接口响应速度。

2)解耦

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

比如文章发布后要:

  • 更新 ES

  • 清缓存

  • 发送通知

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

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

所以它能:

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

3)削峰填谷

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

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

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

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

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

2. 常见使用场景

场景 1:异步通知

比如:

  • 用户注册后发短信

  • 下单成功后发邮件

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

特点是:

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

场景 2:数据分发

比如文章发布后:

  • 更新 ES 索引

  • 清理缓存

  • 发送站内通知

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

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

场景 3:流量削峰

比如:

  • 秒杀下单

  • 抢优惠券

  • 大促订单处理

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

3.面试回答版

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

相关推荐
似水明俊德1 小时前
01-C#.Net-泛型-面试题
java·开发语言·面试·c#·.net
Allnadyy2 小时前
【C++项目】从零实现高并发内存池(一):核心原理与设计思路
java·开发语言·jvm
浑水摸鱼仙君2 小时前
SpringSecurity和Flux同时使用报未认证问题
java·ai·flux·springsecurity·springai
一叶飘零_sweeeet2 小时前
Java 线程模型底层解密:从内核原理到生产级架构选型,全链路实战指南
java· java线程模型
am心3 小时前
企业开发项目流程记录
java
独自破碎E3 小时前
前后端分离+微服务架构下的用户认证
java·面试·架构
hssfscv4 小时前
力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机
java·数据结构·算法
Byron__4 小时前
HashMap面试知识点
java·面试·hash
诺浅4 小时前
聊聊@DSTransactional的坑
java·多数据源·dstransavtional