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

RabbitMQ的死信队列的产生与处理

死信队列(Dead Letter Queue, DLQ)

1. 死信(Dead Letter)是怎么产生的?

在 RabbitMQ 中,消息会变成 死信(Dead Letter)的常见情况有以下几种:

  • 消息被拒绝(Rejection)未被重新入队(requeue = false)

    • 当消费者使用 basic.rejectbasic.nack 拒绝消息,并且 requeue 参数设置为 false 时,RabbitMQ 不会重新投递这条消息,而是将其送入死信队列。
  • 消息过期(TTL 过期)

    • 如果队列或消息本身设置了 TTL(Time-To-Live),当消息存活时间超过 TTL 限制时,消息会被认为是死信。
  • 队列达到最大长度(队列满了)

    • 如果队列设置了 最大长度x-max-length)或 最大字节数x-max-length-bytes),当队列达到这个限制时,新来的消息会导致旧消息变成死信。
2. 如何合理地处理死信?

(1)使用死信交换机(DLX, Dead Letter Exchange)
RabbitMQ 允许我们给队列绑定一个死信交换机(DLX),当消息变成死信时,会被自动转发到 死信交换机,然后路由到 死信队列(DLQ)。

配置示例:

# 创建一个普通队列,并绑定死信交换机
rabbitmqctl set_policy DLX "my-queue" '{"dead-letter-exchange":"dlx-exchange"}' --apply-to queues

这样,my-queue 里的死信消息会被转发到 dlx-exchange 处理。

(2)监控 & 处理死信队列

  • 定期检查 死信队列,找出死信产生的原因。
  • 在死信队列中,可以设置一个消费者来做 重试、记录日志、人工处理 等操作。
  • 结合 TTL + DLX 机制,可以实现 延迟消息队列

(3)调整 RabbitMQ 配置,减少死信

  • 合理设置 TTL,避免消息过早进入死信队列。
  • 增加队列长度,防止因队列满了导致消息变成死信。
  • 正确使用 basic.nackbasic.reject,避免误将消息变成死信。

延时队列:


延时队列场景举例:
预定一个会议室,两个小时后开始,要求提前十分钟通知参会人员进行开会。
如果不使用延时队列,那么就需要不断轮询,查看是否到达需要通知的时间,进行消息通知。

延时队列的实现方式:
死信队列+消息有效期
预定时间到提前十分钟通知中间有110分钟,那么创建一条通知消息,设置有效期110分钟丢入队列,不用消费者去监听,等待消息过期后路由到指定的死信队列,再去消费死信队列中的消息即可。
所以延时队列实际上是一种实现方案,而不是一种特定的队列类型。

总结

死信消息(Dead Letter)通常是由于消息被拒绝、过期、队列满了等情况产生的。合理的处理方式是 绑定死信交换机(DLX)+ 监控死信队列,这样可以对死信进行 重试、日志分析,甚至用于 延迟消息 的场景。


http://www.kler.cn/a/543889.html

相关文章:

  • postman登录cookie设置
  • 腾讯大数据基于 StarRocks 的向量检索探索
  • Python:凯撒密码
  • 港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。
  • 【STM32】H743的以太网MAC控制器的一个特殊功能
  • 使用 Docker 安装 Open WebUI 并集成 Ollama 的 DeepSeek 模型
  • 如何使用deepseek等AI工具辅助web后端工作的开发
  • VMware 虚拟机 ubuntu 20.04 扩容工作硬盘
  • Java常用设计模式面试题总结(内容详细,简单易懂)
  • 动态规划LeetCode-1049.最后一块石头的重量Ⅱ
  • HAC++: Towards 100X Compression of 3D Gaussian Splatting
  • 力扣——【104. 二叉树的最大深度】
  • Apache Kafka 中的认证、鉴权原理与应用
  • 安全运维:cmd命令大全(非常详细)零基础入门到精通,收藏这一篇就够了_cmd的20个基本命令
  • C++ 设计模式-桥接模式
  • 解决珠玑妙算游戏问题:C 语言实现
  • 云原生AI Agent应用安全防护方案最佳实践(上)
  • 数据库高安全—数据保护:数据动态脱敏
  • 【Stable Diffusion部署至Google Colab】
  • 使用Python爬虫获取1688公司档案信息:深入解析
  • halcon三维点云数据处理(十三)reduce_object_model_3d_by_view
  • 适配器模式 + 外观模式联合使用:新旧系统的平滑整合之道
  • visual studio 2008的试用版评估期已结束的解决办法
  • vue基础(八)
  • arkTS基础
  • 人工智能:所有144本SCI期刊都在这里(20本Top,4本On Hold)