尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第一篇:为什么需要消息队列?
为什么需要消息队列上一篇我们聊完了 Redis 系列的最后一篇《Redis 为什么不能当数据库》。Redis 解决的是一个问题如何让系统访问数据更快。但是当系统继续发展流量继续增加只靠 Redis 还不够。因为很多时候系统慢并不是因为数据库慢也不是因为缓存慢而是因为一次请求需要同步完成太多事情。这也是消息队列Message QueueMQ出现的原因。一个最开始的订单系统刚开始开发一个电商系统下单逻辑可能非常简单。PostMapping(/order)publicLongcreateOrder(OrderRequestrequest){OrderorderorderService.create(request);returnorder.getId();}用户提交订单保存订单。返回结果没有任何问题。但是随着业务发展订单创建之后需要做的事情越来越多。比如扣减库存发送短信发放优惠券增加积分更新会员等级通知物流系统写入数据分析平台于是代码慢慢变成PostMapping(/order)publicLongcreateOrder(OrderRequestrequest){OrderorderorderService.create(request);stockService.reduce(order);couponService.send(order);pointService.add(order);smsService.send(order);logisticsService.notify(order);returnorder.getId();}从业务角度看这段代码没有错。订单创建之后这些事情确实都需要做。但是从系统设计角度它开始出现问题。第一个问题接口越来越慢假设每个服务耗时创建订单 20ms扣库存 30ms优惠券 50ms积分 20ms短信 500ms物流通知 200ms最终接口耗时20 30 50 20 500 200 820ms用户点击一次下单需要等待接近 1 秒。但是仔细想一下用户真的需要等待短信发送完成吗需要等待积分增加完成吗需要等待物流系统收到通知吗其实不需要。用户真正关心的是我的订单有没有创建成功。其他事情可以稍后完成。第二个问题服务之间越来越耦合更麻烦的是订单服务现在知道太多东西。它知道订单服务↓库存服务↓短信服务↓优惠券服务↓积分服务↓物流服务如果以后新增一个需求“下单后发送邮件”怎么办继续修改emailService.send(order);如果邮件系统异常创建订单成功↓发送邮件失败整个接口怎么办返回失败但是订单已经创建了这就出现了一个很经典的问题非核心业务失败影响核心业务。那能不能让订单服务只负责订单重新思考一下订单服务真正需要做什么其实只有创建订单告诉其他系统“订单创建成功了”至于谁需要这个消息怎么处理什么时候处理订单服务不应该关心。于是架构变成用户请求↓订单服务↓发送消息↓消息队列↓其他服务消费代码变成PostMapping(/order)publicLongcreateOrder(OrderRequestrequest){OrderorderorderService.create(request);rocketMQTemplate.send(order-created,order.getId());returnorder.getId();}订单服务只负责发送“订单创建成功” MQ 到底做了什么很多人理解 MQMQ 就是帮我存一条消息这个理解不完整。真正重要的是MQ 在系统之间增加了一层缓冲。以前订单服务↓短信服务订单服务必须等待短信服务完成。现在订单服务↓Broker↓短信服务订单服务只需要把消息交给 Broker后面的事情异步完成。这就是消息队列最核心的价值。那为什么不用 HTTP 调用既然服务之间可以 HTTP 调用为什么还需要 MQ比如smsService.send(order);换成POST /sms/send 不也可以吗区别在于HTTP 是主动调用。调用方必须知道谁提供服务地址是什么接口是什么对方是否成功。MQ 是消息通知。生产者只关心消息有没有发送出去。消费者只关心有没有自己感兴趣的消息。两者的关系完全不同。MQ 底层为什么需要 Broker这里其实已经涉及 MQ 的核心设计。很多初学者会想既然订单服务要通知短信服务。为什么不直接订单服务↓短信服务而要增加订单服务↓Broker↓短信服务中间这个 Broker 就是 MQ 的核心。它解决三个问题消息暂存如果短信服务挂了订单服务↓Broker↓短信服务异常消息不会消失等短信服务恢复后继续消费。消费速度不同订单创建每秒 10000 次。短信发送每秒只能处理 1000 次。如果直接调用订单服务也会被拖慢。有了 MQ10000 条消息↓Broker↓消费者慢慢处理生产和消费速度被隔离。多个消费者订阅同一个订单消息订单创建事件↓Broker/ |库存 积分 短信不同系统消费自己关心的数据订单服务不需要知道它们存在。RocketMQ 中消息到底怎么流转以 RocketMQ 为例。一次消息发送并不是Producer↓Consumer而是Producer↓NameServer↓Broker↓CommitLog↓ConsumerProducer 发送消息Broker 保存消息。Consumer 从 Broker 拉取消息。后面的文章我们会继续拆为什么消息需要 BrokerBroker 为什么选择 CommitLog为什么 RocketMQ 写消息这么快消息为什么不会丢消息为什么会重复消费这些才是 MQ 真正有意思的地方。总结消息队列出现不是因为开发者喜欢增加中间件。而是因为系统发展到一定阶段后简单的同步调用已经无法满足需求。当一个接口需要同时通知几十个系统时同步调用会让系统越来越慢服务依赖会越来越复杂。任何一个下游异常都可能影响核心流程。MQ 做的事情本质上就是把一次强依赖的同步调用变成一次可靠的消息通知。它让系统从你必须马上帮我完成变成我告诉你发生了什么你什么时候处理由你决定这就是消息队列存在的意义。上一篇《Redis 为什么不能当数据库》下一篇《消息为什么能够解耦系统》
RELATED

相关推荐

【转载】亚马逊蝮蛇毒液多样性研究:生态和毒理学意义 | MDPI Toxins

【转载】亚马逊蝮蛇毒液多样性研究:生态和毒理学意义 | MDPI Toxins

蛇毒作为蝮蛇等毒蛇的关键生化武器,其组成与变异常被视为影响物种生态适应与生存成功的重要因素。然而,关于毒液成分是否直接决定蛇类在不同生态环境中的分布与生存策略,目前仍缺乏明确结论。来自巴西布坦坦研究所等多家科研机构的的Ana M. M…

📅 2026/8/22 15:41:38
方差互换定价与VIX指数原理:从波动率交易到期权组合复制

方差互换定价与VIX指数原理:从波动率交易到期权组合复制

1. 从波动率交易说起:为什么我们需要方差互换?在金融衍生品的世界里,大家最熟悉的是基于资产价格方向性变化的工具,比如看涨期权、看跌期权、期货。你赌资产价格上涨,或者下跌,盈亏直接与价格挂钩。但有一类…

📅 2026/9/8 14:39:08
Realtek多口网络芯片选型指南:从PHY、Switch到SGMII接口实战解析

Realtek多口网络芯片选型指南:从PHY、Switch到SGMII接口实战解析

1. 项目概述:解码Realtek多口网络芯片的选型迷宫最近在规划一个工控网关项目,需要选型一款支持多路以太网接口的芯片。客户的需求很明确:既要成本可控,又要接口灵活,最好还能集成一些交换功能。在翻遍了各大厂商的选型…

📅 2026/8/22 15:41:38
MORE NEWS

更多资讯

📰

【Coze】【视频】书单诗词工作流

今天给大家演示一个 书单诗词 Coze 工作流。这个工作流将文本生成、语音合成与视频排版紧密结合,通过大模型抽取书籍中的精彩金句,再配合音频与画面合成,实现从文字到短视频的一键式自动化创作。无论是读书博主、诗词爱好者,还是想要快速生成内容的创作者,都能借助该流程高…

📰

【Coze】【视频】每日英语工作流No.1

今天给大家演示一个 Coze 每日英语学习工作流。它通过调用大模型来生成英语知识点与例题,再结合数据整理与可视化排版,让学习者每天都能获得一个完整的英语练习包。该流程涵盖了从知识点生成、数据结构化处理,到可视化例题展示的完整闭环,帮助用户在学习中既能掌握知识要点…

📰

STM32CubeIDE入门:安装配置、点灯工程与中文路径避坑完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

【Coze】【视频】书单选书工作流No.1

今天给大家演示一个 书单选书 Coze 工作流。这个工作流以“输入书名—自动扩展推荐—生成书本文案—配合音频与封面图合成短视频”为主线,实现了从选书到生成书单视频的全流程自动化。通过大模型与插件的结合,用户只需输入一个目标书名,系统便能自动挑选相关名著、获取书籍封…

📰

【Coze】【图文】人间清醒爷爷工作流

今天给大家演示一个 人间清醒爷爷 Coze 工作流。这个工作流以用户输入的文本为起点,结合大模型生成“人间清醒”风格的短句,再通过多节点的协作,把这些文字转化为图像生成的提示词,最后批量输出具有治愈系风格的插画。整体流程既注重文字的情感共鸣,又确保画面的统一和视觉…

📰

Ceph 安全机制深度解析:漏洞报告流程、CVE 管理实践与近期高危漏洞修复指南

存储分布式文件系统对象存储后端高可用 【免费下载链接】ceph Ceph is a distributed object, block, and file storage platform 项目地址: https://gitcode.com/gh_mirrors/ce/ceph 点击查看 免费下载 本篇技术指南以 Ceph 官方安全文档(doc/securit…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬