如果是程序问题导致消费失败的情况,短时间内(未修复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. 软件测试2019:第三次作业
  2. android 手机监听屏幕锁屏,用户解锁
  3. PMCAFF产品众测 | 对话随手攒CEO聊聊产品的设计、推广和改进
  4. 世界正在走向实时化,谈谈Twitter对流处理的理解与思考
  5. 实用知识点梳理:网络操作系统、HTTPS、交换机中用户权限、路由器与集线器功能、HTTP2.0特性
  6. c语言设计二级考试程序修改题,全国计算机二级考试C语言复习题与答案解析
  7. 有故事、有实践,谈一谈深度迁移学习方法的基本思路
  8. 无法装载文件或者汇编的AjaxControlToolkit
  9. Android EditText 赋值与取值
  10. 实现DRBD的简单配置
  11. [置顶] 使用Joson的格式字符串在Socket中通讯时数据格式的转换
  12. 目的路径太长如哈删除_win7系统删除文件夹提示“无法访问此文件夹 路径太长”如何解决...
  13. 商用密码产品认证-智能密码钥匙
  14. 【超图+CESIUM】【基础API使用示例】34、超图|CESIUM - 绘制光流流光线段
  15. 或是独体字吗_独体字
  16. 数字鉴相器matlab,一种数字鉴相器的设计.pdf
  17. WeLink协作文档:办公协作再快一档
  18. python grad_torch.autograd.grad()函数用法示例
  19. PS从入门到精通第2节——揭开PS的神秘面纱
  20. arcsde93安装好了之后,配置连接sde库失败, 提示st_domain_methods报错

热门文章

  1. 计算字符串中某段字符出现次数
  2. 面试官:Redis的key过期之后是立即删除吗
  3. 查看android系统版本号
  4. 深圳奋达职业技术学校计算机二级,深圳市奋达职业技术学校松岗校区
  5. linux 查看服务状态指令
  6. MySQL学习之数据库查询
  7. 湖北科学技术出版社计算机应用基础,计算机应用基础
  8. java导出excel并实现下载功能
  9. 迅雷、快车、QQ旋风下载链接解析
  10. 【钉钉-场景化能力包】企业员工积分排名