[RocketMQ] 发送重试机制与消费重试机制~

发送重试

RocketMQ 客户端发送消息时,由于网络故障等因素导致消息发送失败,这时客户端SDK会触发重试机制,尝试重新发送以达到调用成功的效果。

触发条件
  • 客户端消息发送请求失败或超时。
  • 服务端节点处于重启或下线状态。
  • 服务端运行慢造成请求超时。
  • 服务端返回错误代码(逻辑错误/流控错误)。
重试流程

当重试机制触发时,客户端会按照设置的重试次数一直重新尝试发送消息,直到消息发送成功或达到最大重试次数,在最后一次重试失败后会返回调用错误响应。

重试间隔

如果触发原因不是系统流控错误,则会立即进行重试,无间隔时间。如果是系统流控错误,则会按照指数退避策略进行延迟重试:

INITIAL_BACKOFF: 第一次失败重试前后需等待多久,默认值:1秒。
MULTIPLIER:指数退避因子,即退避倍率,默认值:1.6。
JITTER:随机抖动因子,默认值:0.2。
MAX_BACKOFF:等待间隔时间上限,默认值:120秒
MIN_CONNECT_TIMEOUT:最短重试间隔,默认值:20秒。
系统流控

RocketMQ服务端在系统资源紧缺的时候,会通过快速返回错误来避免底层资源承受更高压力。

触发条件:

  • 存储压力过大:队列存储压力过大时。
  • 服务端请求任务排队溢出:如果消费者消费能力不足,会导致队列中堆积大量消息,当消息超过一定数量后会触发流控。
消费重试

当消费者返回错误状态或超时未返回状态时,RocketMQ 会根据消费重试策略重新投递消息。当重试超过一定次数后,如果还未消费成功,则不再继续重试,直接将消息发送到死信队列中。

主要概念
  • 重试过程状态机:控制消息在重试流程中的状态变化逻辑。
  • 重试间隔:下一次重新尝试消费的时间间隔。
  • 最大重试次数:消息可以被重试消费的最大次数。

不同的消费者类型,消息重试策略略有不同:

消费者类型状态机重试间隔重试次数
PushConsumer就绪/处理中/待重试/提交/死信创建分组时控制。无序消息使用阶梯间隔,顺序消息使用固定间隔。创建分组时控制
SimpleConsumer就绪/处理中/提交/死信通过API修改。创建分组时控制
PushConsumer重试策略

重试状态机

请添加图片描述

  • 就绪(Ready):消息在 RocketMQ 服务端已就绪,可以被消费者消费。

  • 处理中(Inflight):消息被消费者获取,但还未返回消费结果的状态。

  • 待重试(WaitingRetry):当消息处理失败或超时时,会触发重试逻辑。如果重试次数未达到上限,则该消息状态变为待重试,等待重试间隔后,消息重新变为已就绪状态以重新消费。

    待重试是 PushConsumer 特有的状态。

  • 提交(Commit):消费者完成消费逻辑并返回成功响应。

  • 死信(DLQ):消费逻辑的最终兜底机制,当消息重试次数达到上限还未成功,则不会再重试,而是投递到死信队列。死信队列可以被消费从而进行业务恢复。

重试时间间隔

  • 无序消息:重试时间间隔为阶梯时间

    重试次数间隔时间重试次数间隔时间
    110秒97分钟
    230秒108分钟
    31分钟119分钟
    42分钟1210分钟
    53分钟1320分钟
    64分钟1430分钟
    75分钟151小时
    86分钟162小时

    如果重试次数超过16,则后面每次重试间隔为2小时。

  • 顺序消息:重试间隔为固定时间。

SimpleConsumer重试策略

重试状态机

请添加图片描述

  • 就绪(Ready):消息在 RocketMQ 服务端已就绪,可以被消费者消费。
  • 处理中(Inflight):消息被消费者获取,但还未返回消费结果的状态。
  • 提交(Commit):消费者完成消费逻辑并返回成功响应。
  • 死信(DLQ):消费逻辑的最终兜底机制,当消息重试次数达到上限还未成功,则不会再重试,而是投递到死信队列。死信队列可以被消费从而进行业务恢复。

不可见时间

SimpleConsumer 的重试间隔是通过不可见时间来控制的,不可见时间是在调用获取消息API时设置的,可以理解为消息最大处理时长,当消费时间达到了不可见时间仍未返回消息或已经在此前返回失败消息时,则触发重试。

例如设置的不可见时间为50ms,实际在30ms的时候已经返回失败消费状态,那么此时会间隔20ms后触发重试机制。

不可见时间支持在消费处理逻辑中动态修改,修改后立即生效,但修改的实际必须满足一下两个条件:

  • 消息处理未超时。
  • 消息处理未提交消费状态。
    请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题

遇到“mfc140u.dll文件丢失”的错误通常影响应用程序的运行,这个问题主要出现在使用Microsoft Visual C环境开发的软件中。mfc140u.dll是一个重要的系统文件,如果它丢失或损坏,会导致相关程序无法启动。本文将简要介绍几种快速有效的方法来恢…

前端使用xlsx.js实现 Excel 文件的导入与导出功能

前端使用xlsx.js实现 Excel 文件的导入与导出功能 在现代的 Web 开发中,处理文件上传和导出功能已经变得越来越常见,尤其是 Excel 文件的导入与导出。 我们将使用 Vue.js 和 XLSX.js 库来处理 Excel 文件的读取和生成。XLSX.js 是一个强大的 JavaScrip…

02-9.python入门基础一Python模块与包(一)

一、Python 模块的概念 (一)模块的基本定义 在 Python 中,模块(Module)是一种组织代码的基本单元,简单来说,一个以 .py 结尾的 Python 文件就是一个模块。例如,我们创建一个名为 ex…

当我用影刀AI Power做了一个旅游攻略小助手

在线体验地址:旅游攻略小助手https://power.yingdao.com/assistant/ca1dfe1c-9451-450e-a5f1-d270e938a3ad/share 运行效果图展示: 话不多说一起看下效果图: 智能体的截图: 工作流截图: 搭建逻辑: 其实这…

Apache Tomcat 漏洞CVE-2024-50379条件竞争文件上传漏洞 servlet readonly spring boot 修复方式

1,关于漏洞 Apache Tomcat是一个流行的开源 Web 服务器和 Java Servlet 容器。 二、 漏洞描述 Apache Tomcat中修复了个 TOCTOU 竞争条件远程代码执行漏洞 (CVE-2024-50379),该漏洞的 CVSS 评分为 9.8。Apache Tomcat 中 JSP 编译期间存在检查时间使用时…

AI Agent与MEME:技术与文化融合驱动Web3创新

AI Agent如何引领Web3新时代? 随着Web3与区块链技术的迅速发展,AI Agent作为人工智能与区块链的交汇点,正在逐步成为推动去中心化生态的重要力量。同时,MEME文化凭借其强大的社区驱动力和文化渗透力,在链上生态中扮演着…

EasyExcel 导出文件

EasyExcel 导出文件 EasyExcel导出文件,并解决格式报错 项目中使用EasyExcel导出数据 EasyExcel导出数据 引入pom文件 <!-- easy-excel --> <dependency><groupId>com.alibaba</groupId></

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——11上位机与小车交互

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——11上位机与小车交互 ​ 根据上一节的配置&#xff0c;目前已经建立了通讯环境&#xff0c;接下来给大家带来上位机与小车交互 这一章节里面也有图片大家去地瓜开发者社区看对应文章吧链接

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…

使用二分查找法找出给定点距离给定点集合距离最近的点

1、场景描述 给定点Point A &#xff08;x,y&#xff09;和 直线点集合 Points [(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)......],计算出集合中距离点A最近的一个点 &#xff08;如果集合中的两个点距离A点最近且相等&#xff0c;则只取其中一个&#xff09; 2、代码&#x…

经济学 ppt 2 部分

前言 上一次复习经济学是好久之前了&#xff0c;看了第一章的 ppt &#xff0c;好像重点就是谁是软件经济学之父。昨天老师讲了一下题型&#xff0c;20 分选择题&#xff0c; 20 分判断题&#xff0c;20 分计算题&#xff0c;6 6 8 三个计算题&#xff0c;25 分表格&#xff0…

winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭

winform中屏蔽双击最大化或最小化窗体(C#实现)&#xff0c;禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭 protected override void WndProc(ref Message m){#region 处理点击窗体标题栏放大缩小问题&#xff0c;禁用点击窗体标题栏放大缩小//logger.Info($&…

【SolidWorks转URDF】ROS学习笔记

一、环境配置 软件版本&#xff1a;SolidWorks 2022 SP3.1 Premium 转换插件版本&#xff1a;sw2urdfSetup2021.exe 对硬件有一定要求&#xff0c;需要独立显卡&#xff0c;显存大一点&#xff0c;否则会很卡。 二、文件转换 SolidWorks中的零部件和装配体对应URDF文件中的…

Spring学习之——Sping-XML

一、Spring的概述 (一)什么是Spring? Spring是针对bean对象的生命周期进行管理的轻量级容器。提供了功能强大IOC、AOP及Web MVC等功能。Spring框架主要由七部分组成&#xff1a;分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 S…

电商商品详情API接口(item get)数据分析上货

电商商品详情API接口&#xff08;item get&#xff09;在数据分析与商品上货方面发挥着重要作用。以下是对这两个方面的详细探讨&#xff1a; 一、数据分析 数据源获取&#xff1a; 商品详情API接口提供了丰富的数据源&#xff0c;包括商品的标题、价格、库存、描述、图片、用…

EasyGBS国标GB28181平台P2P远程访问故障排查指南:客户端角度的排查思路

在现代视频监控系统中&#xff0c;P2P&#xff08;点对点&#xff09;技术因其便捷性和高效性而被广泛应用。然而&#xff0c;当用户在使用P2P远程访问时遇到设备不在线或无法访问的问题时&#xff0c;有效的排查方法显得尤为重要。本文将从客户端的角度出发&#xff0c;详细探…

win11 C盘出现感叹号解决方法

出现感叹号&#xff0c;原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号&#xff0c;对C盘进行BitLocker解密即可。 步骤如下&#xff1a; 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车&#xff0c;进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

学习threejs,scene.overrideMaterial全局材质效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.2 ☘️THREE.Scene 场景1.2 ☘️…

GTID详解

概念和组成 1&#xff0c;全局事务表示&#xff1a;global transaction identifiers 2, GTID和事务一一对应&#xff0c;并且全局唯一 3&#xff0c;一个GTID在一个服务器上只执行一次 4&#xff0c;mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如&#xf…

面试题整理4----lvs,nginx,haproxy区别和使用场景

LVS、Nginx、HAProxy&#xff1a;区别与使用场景 1. LVS&#xff08;Linux Virtual Server&#xff09;1.1 介绍1.2 特点1.3 使用场景 2. Nginx2.1 介绍2.2 特点2.3 使用场景 3. HAProxy3.1 介绍3.2 特点3.3 使用场景 4. 总结对比 在构建高可用、高性能的网络服务时&#xff0c…