消息队列:MQ架构设计优化

发布时间:2026/9/11 10:51:39

消息队列:MQ架构设计优化 消息队列在复杂系统中应用广泛。虽然说加入mq后系统的复杂度提高、系统可用性也变低而且可能引发数据出现一致性的问题那么为什么还要用MQ呢其实主要是其在特殊的场景下能解决我们很多问题。一、MQ使用的主要场景使用MQ主要场景有三种解耦、异步以及削峰。下面就三大使用场景进行简单介绍1、解耦以生产者-消费者模式为例系统A要为系统B、C发送消息A不仅要维护现有接入系统的数据接受是否超时、失败重发等情况还要维护新增接入系统的D、或者系统B不需接收消息等动态变化的情况。那么MQ的“发布-订阅消息模型”就可以把A与其他系统间的通信进行解耦。这个场景下主要考虑点是消息的调用是否需要直接同步不需要的话即可使用MQ进行系统解耦。2、异步在完成一个业务流程中各个结点不一定需要全部是同步进行的。比如刷卡付款和短信通知扣款这就是可以异步进行的业务节点。日常开发中我们也经常碰到系统A收到请求报文后进行本地入库后给其他两个系统B、C分别发消息然后等待全部消息被处理返回后在返回给用户。假设A入库需要10msB、C返回结果分别是500ms那么总耗时就是10ms500ms500ms1010ms。使用MQ,A发消息给MQMQ同步给B和C。总耗时最多也是10ms500ms510ms几乎效率提升了一倍。3、削峰一些电商平台的流量在一天内会出现明显的抖动。在平常并发数大概也就50个/秒但是高峰期可能达到5000以上的并发。而这些平台的数据库都是并发支持上限在2000左右的mysql因此很快久把数据库给搞崩了系统也没法再正常使用。常用的做法是把请求写入到MQ里面然后系统A按数据库可以支持的并发量去拉取数据。这样就限制住了整个系统的处理速率等待高峰期过后系统访问流量下降到50个时依旧用2000个/秒的处理速度即可快速消化积压的请求。二、MQ系统设计RabbitMQ是一款常用的MQ中间件我们就以它为例讲述下MQ系统设计的过程。我们了解MQ是基于“发布-订阅消息模型”设计的那么这里就有三个主要的节点消息队列、生产者、消费者。上一节我们也说过了解耦、异步、削峰的三大使用场景或者好处但是坏处在引起系统可用性降低、系统复杂度提高以及数据一致性问题。我们设计时前面两个问题比较难解决我们重点解决一致性问题。接下来我们就从消息队列、生产者、消费者进行优化设计1、消息队列RabbitMQ的信息在默认情况下只保存在内存中不做持久化到硬盘的操作。这种情况下如果出现MQ节点宕机或者重启的话消息就被丢失了。所以我们设计时要考虑把消息进行持久化。从RabbitMQ的架构图de 架构图来看要实现消息持久化需要同时满足三个条件1Exchange设置了持久化2Queue设置持久化3Message持久化2、生产者在生产者这端遇到的主要问题是不能确定消息是否真的到达了MQ服务器并被正常接收。对于一般消息来说丢失了影响可能不大但是对于类似银行卡的账号余额变动扣款等消息那么影响就非常大了。那么我们可以在生产者端设置Confirm和Return两种机制。在配置文件中加入publisher-confirm-type: CORRELATEDpublisher-returns: true3、消费者在正常流程中只要RabbitMQ把消息推送给了消费者即可认为投递成功那么MQ就会把内存或者磁盘中的消息给删掉。但是如果消费者节点意外挂掉了如逻辑处理时间过程超时了、网络中断、消费者节点被停掉等多种异常情况。那么消息可能就被丢失了没法正常消费掉。所以我们可以把消费者端的自动ACK模式改为手动ACK模式。修改后消费者在处理消息成功后手动ACK给MQ服务端这时候服务端才把消息从内存删掉。如果一个消费者端出问题了没有消费成功这个消息那么消息还可以给其他同功能的消费者去进行消费保证消息不丢失。这种机制就叫ACK确认机制。4、应对意外情况上面从发布-订阅消息模型中的三个节点进行MQ系统设计的优化可以保证99.99%的消息被正常处理但是还是有一些常见的意外场景值得我们在深思的。例如生产者在发送消息到MQ前突然宕机MQ在准备持久化到磁盘时宕机。那么我们应该如何应对呢消息补偿机制就是一个很好的解决方法。一般会抽取一个独立的的微服务定时轮询数据库中消息发送情况并把未发送成功的消息进行重新发送。一般消息持久化入库会设定补偿次数创建时间、以及消息状态。消息补偿服务会定时把补偿次数小于阈值的未发送成功的信息进在行重发。当然也需要预留业务处理的事件一般情况下我们可以设定创建时间在5分钟内的消息不进行重发。
延伸阅读

更多相关文章

2026/9/11 10:46:34

基于STM32的鱼缸水质监测系统DIY设计与实现

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

2026/9/11 10:46:34

Nsis打包Unity Exe文件(通用)

Nsi 脚本 !include "MUI2.nsh"#使用现代UI Unicode true #使用Unicode !define EXENAME "exeName" #定义常量 exe名称 !define SHORTCUT "快捷方式名称" #定义桌面快捷方式的中文名称Name "${EXENAME}" #安装程序的title OutFile &qu…

2026/9/11 10:46:34

iOS 4.3审核被拒怎么办?小蟹iOS混淆4.3实战解析

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

2026/9/11 11:51:47

OpenClaw OAuth登录报错排查与解决方案

1. OpenClaw OAuth登录报错深度解析最近在部署OpenClaw时遇到一个典型问题:"Agent failed before reply: OAuth token refresh failed for qwen-portal: Qwen OAuth refresh"。这个错误看似简单,但涉及OAuth2.0认证流程、token刷新机制和具体平…

2026/9/11 11:51:47

生产环境报表系统故障排查与性能优化实践

1. 问题现象与初步定位最近在维护公司分析系统时遇到一个典型问题:报表发布后,用户访问页面频繁出现报错。这个现象在多个业务部门反馈中高度一致——开发环境测试正常的报表,一旦发布到生产环境就会触发各种异常。作为系统管理员&#xff0c…

2026/9/11 11:51:47

SCI期刊晋升1区TOP与版面费变革分析

1. 学术期刊动态:从2区晋升1区TOP的变革分析 最近学术圈流传着一个值得关注的现象:某知名期刊从SCI二区跃升为一区TOP期刊后,突然宣布将从2026年开始收取版面费。这个消息在科研人员中引发了广泛讨论,也折射出当前学术出版生态的某…

2026/9/11 11:46:46

AI Agent科研工作流实战:Kimi+扣子分层协作指南

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

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码