LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

MQ如何实现,消息必达到?

admin
2025年1月6日 10:44 本文热度 212
MQ能不能实现消息必达?

要想消息必达,架构设计上有两个核心设计点:
1. 消息落地;
2. 消息超时、重传、确认;
更具体的,要从MQ的架构与流程谈起。

MQ的核心架构如何?
如上图所示,MQ的核心架构图分为三大块:
1. 发送方 -> 左侧粉色部分;
2. MQ核心集群 -> 中间蓝色部分;
3. 接收方 -> 右侧黄色部分;

粉色发送方又由两部分构成:
1. 业务调用方;
2. MQ-client-sender;

其中,后者向前者提供了两个核心API:
SendMsg(bytes[] msg)
SendCallback()

蓝色MQ核心集群由MQ-server,zk,db,管理后台web等一系列子系统组成。

黄色接收方也由两部分构成:
1. 业务接收方;
2. MQ-client-receiver

其中,后者向前者也提供了两个核心API:
RecvCallback(bytes[] msg)
SendAck()
MQ是一个系统间解耦的利器,它能够很好的解除发布订阅者之间的耦合,它将上下游的消息投递解耦成两个部分,如上述架构图中的箭头1和箭头2:
箭头1,上半场:发送方将消息投递给MQ
箭头2,下半场:MQ将消息投递给接收方

MQ既然将消息投递拆成了上下半场,为了保证消息的可靠投递,上下半场都必须尽量保证消息必达。

上半场,消息投递流程如何?
MQ消息投递上半场,流程见上图123:
1. sender将消息发送给MQ-server;
2. MQ-server将消息落地;
3. MQ-server回调sender;

上半场,如果消息丢了怎么办?
答:超时与重传。

MQ上半场的123如果丢失或者超时,sender内置的timer会重发消息,直到收到3。如果重传N次后还未收到3,则SendCallback向业务方回调发送失败。

下半场,消息投递流程如何?
MQ消息投递下半场,流程见上图456:
4. MQ-server回调reciever;
5. reciever收到消息,处理业务逻辑,将ACK发送给MQ-server;
6. MQ-server收到ACK,将之前已经落地的消息删除,流程结束;

下半场,如果消息丢了怎么办?
答:还是超时与重传。

MQ下半场的456如果丢失或者超时,MQ-server内置的timer会重发消息,直到收到5并且成功执行6。

上下半场都要超时重发,策略如何?
常见的策略有两种:
1. 定时重发,每隔10秒发一次,直到超出次数;
2. 指数退避,先隔x秒重发,2x秒重发,4x秒重发,以此类推;

总结
1. MQ是系统之间的解耦利器,它能解除消息发送方与接收方的直接耦合;
2. MQ将消息投递解耦成了上下两个半场;
3. MQ消息必达,架构上有两个核心设计点:
 - 消息落库
 - 消息超时、重传、确认

未尽事宜
消息重发可能导致收到重复的消息,如何进行架构幂等性设计,下次撰文另述。

知其然,知其所以然。
思路比结论更重要。

补充阅读材料:
《MQ系统设计
https://www.geeksforgeeks.org/message-queues-system-design/


==全文完==


该文章在 2025/1/6 10:44:29 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved