黑马点评-消息队列相关

Q:好的我现在明白不是返回数据格式的问题,但我还是很模糊,你给我再讲一下后端返回给前端数据的一般过程,和用消息队列后的返回过程

A:tomcat线程先释放 (本来controller调service service调mapper查询数据库,一整套流程走完返回VO实体类给前端,有了消息队列后,controller接收到请求,查redis,判断下单成功直接给前端返回数据,然后释放tmocat线程,后台启动一个静默线程执行订单insert数据库等操作,,,并在 一段时间后再次给前端返回数据)

我给你画最清晰、最朴素、最真实的前后端交互流程

你马上彻底不模糊!我只讲最本质的区别

先记住一句超级本质的话

后端给前端返回结果 = 一句话:我做完了没?做完了就给你结果。

消息队列 = 我没做完,但我先告诉你 “我收到了,会慢慢做”。

一、先讲:后端返回给前端数据的正常、一般过程(90% 的业务)

你平时写接口都是这样:

流程:

  1. 前端发请求 → 到后端 Tomcat
  2. Tomcat 线程开始处理
  3. 执行代码:查数据库修改数据库保存数据
  4. 所有事情全部做完
  5. 返回 JSON 给前端
  6. Tomcat 线程释放

样子:

plaintext

请求来了 → 干活 → 干完 → 返回 → 结束

特点:

  • 必须等所有逻辑执行完
  • 前端必须一直等着
  • 数据库慢 → 整个接口就慢
  • 高并发 → 线程耗尽 → 系统卡死

二、再讲:使用消息队列后的返回过程(秒杀优化)

流程:

  1. 前端发请求 → 到后端 Tomcat
  2. Tomcat 线程开始处理
  3. 只做超快的事(Redis 判断)
  4. 把 “要做的慢任务” 扔进消息队列
  5. 立刻返回 JSON 给前端:抢购成功!
  6. Tomcat 线程直接释放!!!

后台(另一个独立线程)慢慢执行:

  • 从队列拿任务
  • 查数据库
  • 扣库存
  • 创建订单

样子:

plaintext

请求来了 → 快速判断 → 扔队列 → 返回 → 线程结束
(后台线程:慢慢数据库操作)

特点:

  • 不等数据库!
  • 接口速度极快
  • Tomcat 线程瞬间释放,可以处理更多请求
  • 数据库压力极小
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务