RabbitMQ的死信队列

死信队列的概念

死信(Dead Letter)是消息队列中的一种特殊消息,是指没有办法被正常消费或者处理的消息,例如消息过期、消息被拒绝、队列满了

RabbitMQ的私信队列就专门用来存储这些死信消息

死信的来源

  1. 消息被拒绝(Rejection)

    消费者显式拒绝接收某条消息,并且不希望该消息被重新投递时,这条消息会进入死信队列。

  2. 消息超时(TTL Expiration)

    消息的生存时间(Time-To-Live, TTL)超过了指定的时长,而消息仍未被消费,这样的消息会被转移到死信队列。

  3. 队列长度超限(Queue Overflow)

    当消息队列的长度达到最大限制,再有新消息进入时,多出来的消息可能会被直接移动到死信队列。

  4. 重试次数达到上限

    某些消息在多次消费尝试失败(如因业务逻辑异常)后,达到最大重试次数后进入死信队列。

死信队列的应用场景

对于RabbitMQ来说,死信队列是可以存储不能被正确消费的信息的,可以通过消费死信队列中的内容来分析可能出现的异常情况,可以用于改善和优化系统

可以用于比如说消息重试,丢弃,日志收集,人工处理等

常见的死信队列实现

  1. RabbitMQ

    RabbitMQ 支持通过设置队列的死信交换机(Dead Letter Exchange, DLX)来实现死信队列。当消息变为死信时,RabbitMQ 会将它们转发到绑定在 DLX 上的队列中。

  2. Kafka

    在 Kafka 中,可以通过专门的主题(Topic)充当死信队列。开发者需要在消费失败时显式地将消息发送到死信主题。

  3. AWS SQS(Simple Queue Service)

    AWS SQS 支持直接配置死信队列,开发者可以设置消息的最大重试次数,超出后消息会被自动转移到死信队列。

  4. RocketMQ

    RocketMQ 通过 DLQ 专用主题处理死信消息,每个消费组都有一个死信主题,格式通常为 %DLQ%+ConsumerGroupName

相关推荐
szephyr11 小时前
消息队列入门:RabbitMQ 和 Kafka 到底怎么选,什么时候不该用
后端·架构·kafka·消息队列·rabbitmq
lisanmengmeng21 小时前
分布式追踪与监控:Skywalking介绍(一)
分布式·skywalking
HanhahnaH21 小时前
Redis单线程和Tair多线程架构设计对比
分布式·缓存
rustfs21 小时前
MinIO 国产开源平替正式 GA
分布式·docker·云原生·rust
螺蛳粉 螺蛳粉1 天前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
孙启超1 天前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
九皇叔叔1 天前
Seata——把分布式事务理论落到 Java 微服务实践
分布式·分布式事务·cap·base·saga
Msshu1231 天前
什么是PD快充诱骗取电芯片,PD快充取电芯片如何选型
flink·rabbitmq·ambari·mariadb·storm·talkingdata
程序员黎剑1 天前
RabbitMQ-消息可靠性-publisher-confirm持久化与手动ack
分布式·rabbitmq·ruby
吃饱了得干活1 天前
一个订单的奇幻漂流:RabbitMQ 五大难题实战
spring boot·后端·rabbitmq