如果是程序问题导致消费失败的情况,短时间内(未修复bug之前),当重试次数消耗完之后,消息则会被丢弃。 所以需要有对应方案,也就是配置死信队列。(SpringCloud Stream)

产生死信队列消息有两种方式:
1.当消息处理消费失败后,SpringCloud Stream 会自动默认重试3次(可通过配置maxAttempts来修改消费该队列消息的最大次数),重试三次失败后,RepublishMessageRecoverer类recover方法会将改变routingkey为队列名称发送至死信队列。
2.当队列里消息堆积过多时,超时未被消费的消息会放入到死信队列中。

死信队列需要开发人员手动进行配置,如下图:

我们并不是直接声明一个公共的死信队列,然后所以死信消息就自己跑到死信队列里去了。而是为每个需要使用死信的业务队列配置一个死信交换机,同一个项目或者同一个类型的业务的死信交换机可以共用一个,然后为每个业务队列分配一个单独的路由key。有了死信交换机和路由key后,接下来,就像配置业务队列一样,配置死信队列,然后绑定在死信交换机上。死信队列并不是什么特殊的队列,只不过是绑定在死信交换机上的队列。死信交换机也不是什么特殊的交换机,只不过是用来接收死信的交换机。

通过配置死信队列,可以让未正确处理的消息暂存到另一个队列中,处理死信队列的消息一般有两种方式:
1.由于程序执行,一些数据有问题,程序无法再继续进行处理,所以需要负责该任务的开发人员进行手动去处理。
2.当队列里消息堆积过多时,超时的消息也会放入到死信队列中,由于死信队列其实也是和普通消息一样,也是可以订阅的,所以可以订阅死信队列消息,然后开发人员定义死信队列消息消费逻辑,通过程序再处理那些超时的消息。(我们可以将所有队列绑定同一个死信队列,然后订阅这个死信队列,输出该队列成为死信队列的原因,保存到日志表中,再由开发人员去查看日志进行处理。)

访问Rabbitmq可视化界面可查看死信队列消息

Get messages功能
点击队列名称查看队列信息,点击Get messages 按钮可获取死信队列里的消息信息


在打印的堆栈信息中,可以看到造成错误的信息、时间戳、监听的自定义的header信息和header信息的值,可根据这些去追踪该消息消费失败的原因。

其他header信息
routeTo:这是自己定义的头信息

x-exception-message:异常信息
x-exception-stacktrace:堆栈信息
x-original-exchange:绑定的交换机
x-original-routingKey:队列

Move messages功能

点击 Move messages 按钮死信队列的所有消息全部被重新投递到目标队列,通过 Move messages 功能,是可以将死信重新投递到原队列,而且也可以被正常重新消费。也可以通过订阅死信队列的方式来定义死信队列消息消费逻辑,然后通过程序再处理那些超时的消息。

Delete Queue功能

删除当前队列

Purge Message 功能

清除当前队列里的信息

关于死信队列的其他配置:

参考SpringCloud Stream官方文档:https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit

Rabbitmq手动未确认解决方案相关推荐

  1. rabbitmq 手动提交_RabbitMQ系列(四)RabbitMQ事务和Confirm发送方消息确认——深入解读 - 王磊的博客 - 博客园...

    RabbitMQ事务和Confirm发送方消息确认--深入解读 RabbitMQ系列文章 引言 根据前面的知识( 深入了解RabbitMQ工作原理及简单使用 . Rabbit的几种工作模式介绍与实践 ...

  2. RabbitMQ手动确认模式(项目开发常用模式)

    RabbitMQ 手动确认模式(日常项目开发常用模式) 借鉴导言 架构及工作原理 项目开发使用(公司常用) 借鉴导言 此文借鉴多名CSDN用户博客,并将其博文中关于MQ常用的点,进行了归纳整理 借鉴博 ...

  3. springboot整合rabbitmq的发布确认,消费者手动返回ack,设置备用队列,以及面试题:rabbitmq确保消息不丢失

    目录 1.生产者发消息到交换机时候的消息确认 2.交换机给队列发消息时候的消息确认 3.备用队列 3.消费者手动ack rabbitmq的发布确认方式,可以有效的保证我们的数据不丢失. 消息正常发送的 ...

  4. 544、RabbitMQ详细入门教程系列 -【手动消费确认】 2022.09.05

    目录 一.前言概述 二.配置实现 2.1 XML配置 2.2 MessageListener实现 三.消息预取 四.并发消费 五.参考链接 一.前言概述 RabbitMQ(四) --消费者Consum ...

  5. RabbitMQ之消息确认机制(事务+Confirm)

    概述 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达brok ...

  6. RabbitMQ的消息确认ACK机制

    1.什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持消 ...

  7. RabbitMQ的消息确认机制

    转:https://www.toutiao.com/a6583957771840913934/?tt_from=mobile_qq&utm_campaign=client_share& ...

  8. RabbitMQ------发布确认(单个确认、批量确认、未确认)(四)

    RabbitMQ------发布确认(四) 发布确认原理 生产者将信道设置为confirm模式,一旦信道进入confirm模式,所有再该信道上面发布的消息都会被指派一个唯一的ID(从1开始),一旦消息 ...

  9. SpringACK对RabbitMQ消息的确认(消费)

    SpringAMQP对RabbitMQ消息的确认(消费) 之前已经简单介绍了基本是从发送方去确认的,我们需要在配置文件当中开启发送方确认模式,共育两种,一种是相对于交换机一个是相对于队列. 本次的介绍 ...

最新文章

  1. Fiddler代理手机抓包
  2. 簡單安裝軟件 GNU Linux
  3. 发现asp.net 2.0 在MSDN中的多个BUG 关于无刷新窗体的
  4. 使用路标的Scala和Java的Twitter REST API
  5. 真的没办法一心一意麽? php 文件操作
  6. kibana创建索引_ELK 索引生命周期管理
  7. 磁盘在linux是什么文件,鸟哥的 Linux 私房菜 -- Linux 磁盘与文件系统管理
  8. vnc全屏界面怎么设置小_如何设置 才能 修改 vnc 有效窗口大小
  9. 用计算机将复数转换成角度,卡西欧FX-991ES计算器能计算电路里的复数加减乘除然后换算成角度吗?...
  10. excel两个表格数据对比_Excel跨表格数据对比
  11. 人生如常,常亦无常,亦无进,茫然终身,谓常
  12. 数学与计算机学院女生节标语,女生节标语理学院
  13. BMW 与 Harvester 的云与边缘之旅
  14. vue中网址转换图片
  15. 数据预处理之数据离散化
  16. S7-PLCSIM Advanced V3.0下载仿真失败
  17. 使用阿里矢量图标的三种方法
  18. 软件工程师安德烈·梅萨加冕世界小姐
  19. 为新开的餐厅设计网站html,21个餐厅食品网站设计欣赏
  20. 线偏振光通过半波片之后的解释

热门文章

  1. jetson nano 网络配置
  2. 软件开发相关的读书笔记 问题与方法
  3. 互联网人一天24小时在做些啥《打工人的那些事》
  4. 3个多月的实习体会与总结
  5. System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本
  6. 入手MacBook必装的软件|2023
  7. mysql 走索引 很慢_MySQL 优化:为什么 SQL 走索引还那么慢?
  8. Linux 软链接 “Too many levels of symbolic links”问题解决与研究
  9. python 3.x版本的默认编码是_[python] python3.X编码格式问题
  10. 完整的学习C++的读书路线图