06.RabbitMQ重试机制

2023-11-02

RabbitMQ重试机制

补偿机制

在消费中如果发生异常了,RabbitMQ会使用补偿机制(重试),如果消息没消费成功,会一直重复发送,直到消费成功为止。

我们以之前的P2P例子为例:

@Component
@RabbitListener(queues = "USER")
public class P2PUserConsumer {

    @RabbitHandler
    public void receive(String msg){
        System.out.println("消费者消费的消息:" + msg);
        // 抛出一个运行时异常,模仿消费异常
        throw new RuntimeException();
    }
}

运行项目,可以看到控制台一直报错

image-20211119144714639

RabbitMQ一直在重试状态,消息一直没有被消费掉,可能在线上会导致消息堆积情况,某些情况就影响使用了。

image-20211119145021482

重试机制如何合理配置

重试机制确实是保证消息一定被消费掉,但在某些场景会不适用,重试会出现以下问题:

  1. 接口的幂等性问题
  2. 导致消息堆积消息一直不被消费

不适合重试:代码bug问题,并且有写操作,这个时候需要考虑到幂等。后台服务应该通过日志,后期通过定时器来补偿,或者手动补偿。

适合重试:大部分属于读取,如调用第三方接口、网络波动问题、暂时调用不了、网络连接等。

配置重试机制

spring:
  rabbitmq:
    listener:
      simple:
        retry:
          # 开启消费者重试机制(默认就是true,false则取消重试机制)
          enabled: true
          # 最大重试次数
          max-attempts: 5
          # 重试间距(单位:秒)
          initial-interval: 2s

以上配置消息会重试5次,如果一直失败,RabbitMQ放弃消费了,需要后期配置死信队列(在下篇文章描述)

image-20211119151215693

如何解决幂等性问题:

  1. 使用全局消息ID
  2. 根据业务ID判断
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

06.RabbitMQ重试机制 的相关文章

随机推荐

  • Jupyter notebook从电脑本地读取csv文件

    在菜单中打开Anaconda Prompt 然后输入 jupyter notebook generate config 打开输出的路径的配置文件 找到 c NotebookApp notebook dir 然后将 去掉 并且在 中写入想要存
  • Java poi导出word文件

    Java在导出word文件时主要对表格中内容垂直居中处理做以记录方便后续碰到类似问题解决 maven pom xml中添加poi依赖
  • 使用IDEA导入SpringBoot项目

    有时候会拿到别人现成的 springboot 项目 而不是从头自己做一个 这个时候 就需要用导入的方式来 import 这么一个项目了 1 IDEA 导入 SpringBoot 项目办法 1 菜单 gt File gt New gt Pro
  • 2021-05-05 星期三 常用的算法的时间复杂度和空间复杂度

    常用的算法的时间复杂度和空间复杂度
  • 变分推断和指数族分布

    一 变分推断基础 首先 对数先验概率有 ln p X ln p X Z p Z X ln p X Z q Z q Z p Z X ln p X Z q Z ln q Z p Z X 1 2 3 1 l n p
  • JDK 安装 与环境变量配置 详细教程

    1 JDK jre 8u161 windows x64 exe 下载 所有平台 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 htm
  • 微信小程序登录授权

    一般的微信小程序登录都会先前端调用wx login生成code传给后端 后端通过code获取到openid和session key并返回给前端 前端调用wx getUserInfo获取对象参数等信息 由于需求问题 我所写的小程序登录直接由前
  • java中unexpected token

    文章目录 问题 问题 public class People int m 10 n 1 n 200 2 void f if m n n m 3 else n n m 4 这道题问的是 下列哪行代码有错误 一开始并没有发现问题的所在 放了编辑
  • 寻找环形链表的入口点

    如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 我们使用整数来表示链表尾连接到链表中的位置 索引从 0 开始 先定义一个节点 struct ListNode int val struc
  • 通讯协议与即时通讯

    转自 https www jianshu com p ca4aeabf55f6 推送服务一般有三种实现方式 1 轮询方式 客户端不断的查询服务器 检索新内容 这种方式的缺点十分明显 如果轮询频率过快 会大量消耗网络带宽和电池 2 长连接方式
  • FPGA学习---3.IP核使用,Counter IP核

    三 LPM counter IP核使用 小结 counter IP核 cin进位输入 clock时钟信号 cout进位输出 q当前计数值 FPGA设计方式 调用IP核 路径放到prj的ip文件夹下 名字叫counter就行 几位的计数器 计
  • Ubuntu 中vi下方向键变成ABCD, backspace无法删除字符的解决办法

    转载自 https blog csdn net sunzz pku article details 40581881 在linux中安装完VIM后 发现在insert模式下 按下四个方向键在屏幕中会输出ABCD这样的字符 并且Backspa
  • Java学习笔记 --- IDEA

    一 IDEA介绍 1 IDEA全称IntelliJ IDEA 2 在业界被公认为最好的Java开发工具 3 IDEA是JetBrains公司的产品 总部位于捷克的首都布拉格 4 除了支持Java开发 还支持HTML CSS PHP MySQ
  • Sonar 配置代码扫描规则 与 质量配置,设置各个语言默认的扫描规则

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 配置代码扫描规则 质量配置 设置各个语言默认的扫描规则 代码规则设置 如果认为有些扫描规则太严格了 可以把它 挂起 以后再构建的代码扫描项目时就不会再使用本规则 例如挂起J
  • electron-14版后remote废除

    文章目录 前言 安装与配置 前言 Electron最近的版本变迁比较频繁 在升级到14 0 0版本后 废除了很多旧有的API 而其中最主要的就是remote模块从旧有的模块里抽出 变成了一个需要新安装的模块 electronic remot
  • Android升级到7.0使得webview加载页面为空白页

    前段时间 公司一哥们把他的手机拿给我看 问到公司的软件加载进去是空白页 等了好久也是空白 我也为是网络出现了问题 排查没问题啊 看看是不是缓存问题 又是清缓存 又是卸载重装 结果还是空白页面 想了一下是不是系统问题 问他有没有更新过系统 结
  • Android:RecyclerView 的使用,有这一篇就够了

    谨以文章记录学习历程 如有错误还请指明 RecyclerView 简介 首先 可以理解 RecyclerView 是 ListView 的升级版 更加灵活 同时由于封装了 ListView 的部分实现 导致其使用更简单 结构更清晰 从名字
  • 金融数据时间序列分析——模型准确率过高怎么办

    多少年后 小f想起了自己还是刚刚出道的小萌新时候犯的一个错误 当时模型的准确率贼高 高的离谱 就像下面这种情况 precision recall f1 score support 1 1 1 1 1934 0 1 1 1 535 1 1 1
  • LoadStdProfileSettings -- 加载MRU

    如何为自己的应用程序加入最近文件列表功能呢 最简单的方法就是在你新建工程的时候选择包含最近文件列表功能 也就是在 MFC AppWizard 的第 4 步的时候使 How many files would you like on your
  • 06.RabbitMQ重试机制

    RabbitMQ重试机制 补偿机制 在消费中如果发生异常了 RabbitMQ会使用补偿机制 重试 如果消息没消费成功 会一直重复发送 直到消费成功为止 我们以之前的P2P例子为例 Component RabbitListener queue