当前位置: 首页 > news >正文

RocketMQ如何保证消息可靠性

RocketMQ如何保证消息可靠性

需要从Producer、Broker、Consumer这三个方面来阐述。RocketMQ并不是说能100%保证消息不会丢失,而是通过各种手段把丢失概率降到极低。

Producer

依赖broker响应机制并且失败会重试

发送方式 是否可靠
oneWay 最差
async 中等
sync 最可靠

同步发送消息时,只有收到 Broker 成功响应(SEND_OK),才会认为消息发送成功,当然异步方式也有回调。但是异步方式失败了不会有重试逻辑。

同步发送时,若broker没有响应,或者响应不是SEND_OK(这个需要打开参数才行),会重试2次。并且重试时会选择另外的broker来进行发送,毕竟还是发送给失败的这个broker,可能还是会失败。

重试逻辑: DefaultMQProducerImpl.sendDefaultImpl()

挑选队列: DefaultMQProducerImpl.selectOneMessageQueue(),会轮训队列进行发送,若发送失败,轮训下一个队列时还会判断该队列是否分布在这个发送失败的broker上,若是则继续轮训下一个队列。若没有另外一个broker可选,则回退默认的轮训策略,不会再判断broker了。

若有响应,但是响应不是SEND_OK时,需要设置retryAnotherBrokerWhenNotStoreOK参数才会进行重试逻辑,默认为false。

只有同步发送,并且是普通消息(无序)才会有重试逻辑,因为普通消息可以随意选择发往不同的队列

/*** 有重试逻辑*/
public SendResult send(Message msg);
public SendResult send(Message msg,long timeout);/*** 无重试逻辑* 因为有指定要发送的队列*/
public SendResult send(Message msg, MessageQueueSelector selector, Object arg);
public SendResult send(Message msg, MessageQueue mq);

Broker

两种刷盘模式

同步刷盘 SYNC_FLUSH,真正落盘后才返回成功,即使Broker突然宕机,消息也已经持久化到磁盘上了。

异步刷盘 ASYNC_FLUSH(默认),此时消息只是写入到操作系统的PageCache,就返回成功了,还没有真正持久化到磁盘中,后台线程异步刷盘,性能会高很多,若Producer已经收到成功的响应,此时Broker突然宕机,异步线程还没有刷盘,那消息就丢失了。

两种复制方式

异步复制(ASYNC_MASTER),本地写成功就ACK,然后异步同步 Slave。风险: Master宕机Slave还没同步完成。

同步复制(SYNC_MASTER),master和slave都成功,才ACK。可靠性极高,但是性能下降明显。

因此最可高的方式是同步发送+同步刷盘+同步复制

Consumer

消费者也有ack机制,只有消费成功后才提交消费进度。并且消费失败有重试机制,超过最大重试次数后进入死信队列。消费端一定要最好幂等性设计,有太多的情况会导致消息重复投递,最典型的是消费进度没有提交成功。

http://www.jsqmd.com/news/968823/

相关文章:

  • 3个关键步骤:如何用LaserGRBL免费软件掌控激光雕刻全过程
  • 超越官方限制:OpenCore Legacy Patcher如何让老款Mac重获新生
  • 2026 石家庄闲置奢侈品如何变现 添价收统一流程规范交易细节 - 薛定谔的梨花猫
  • 零基础PHP程序员如何原子化恶补操作系统基础知识的庖丁解牛
  • 一套可直接运行的雷达PRI分选MATLAB工具集,含信号生成、自相关分析与多级优化算法
  • 2026 西安口碑好瓦房屋顶漏水维修 TOP4:专业修缮服务商测评 - 冠盾建筑修缮
  • 告别复杂命令行:5个实用功能让原神私服管理变得轻松有趣
  • 泉州丰泽区黄金回收行情解析与六家正规机构详览 - 专业黄金回收
  • 柳州鱼峰区当前黄金回收行情解析 如何安全变现避免踩坑 - 专业黄金回收
  • d2dx:让经典暗黑破坏神2在现代PC上焕发新生的技术方案
  • MATLAB蚁群路径规划实战包:含障碍地图生成、ACO寻路与Dijkstra算法效果对比
  • 抖音视频下载的终极解决方案:免费无水印批量下载工具
  • 冒险岛资源宝库:用WzComparerR2轻松解锁游戏文件奥秘
  • 从玻尔兹曼机到AlexNet:Hinton那些被低估的早期论文,今天还能怎么用?
  • 5步搭建个人云游戏平台:用Sunshine解决你的跨设备游戏串流难题
  • LLM 验证代码题解的方法论与实验报告:AI 辅助刷题的正确打开方式
  • 2026年6月最新:积家全国官方售后服务中心网点全面核验(含迁址与新增) - 亨得利官方服务中心
  • OpenCamera:完全免费的开源Android相机应用神器
  • EdgeRemover:Windows 10/11上安全卸载Microsoft Edge的完整解决方案
  • 惠州惠阳区黄金上门回收,足不出户轻松变现 - 专业黄金回收
  • 互联网情怀的工程实践:从情感共鸣到硬件落地的技术拆解
  • Mido:Python MIDI编程的3大核心问题解决方案
  • 传统晒太阳越久补钙越多,编写程序结合肤色,时段,时长,计算有效晒背时间,预警晒伤风险。
  • 如何高效实现智能图案填充:Illustrator脚本插件实战指南
  • 深度解析MDK map文件:从加载映像到执行映像的内存布局与启动流程
  • Ubuntu系统中基于ROS1的海康工业相机图像采集与发布方案
  • 2026年职业培训小程序多少钱 - 凡科杰建云
  • Adobe-GenP 3.0终极破解指南:如何免费解锁Adobe全家桶软件
  • 2026 西安碑林区包包回收哪家好 添价收现场核验快速结算 - 薛定谔的梨花猫
  • 太原迎泽区黄金回收时机到944元克价卖金指南 - 专业黄金回收