死信队列
2025-4-20
| 2025-4-20
Words 726Read Time 2 min
type
status
date
slug
summary
tags
category
icon
password
死信队列是指当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信。
  • 消息被拒绝(basic.reject / basic.nack),并且requeue = false
  • 消息TTL过期
  • 队列达到最大长度
notion image
image-20230616172332204

逻辑

一个生产者,两个消费者,一个是正常消费者,一个是死信消费者。正常消费者声明一个正常交换机,一个死信交换机,声明一个正常队列和死信队列,交换机和队列绑定,正常队列再和死信队列绑定,当消息达到死信条件的时候讲消息发送给死信交换机,发送到死信消费者进行处理。
notion image

生产者

发送消息,设置消息过期时间为 10 秒

测试

先启动消费者,初始化交换机和队列。然后把消费者程序停掉,再启动生产者。生产者发送 10条消息,因为没有消费者接受,所以可以在后台看到消息,会被转到死信队列中。
下图可以看到正常队列中有 10 条消息,10秒过后因为没有被消费,所以移动到了死信队列中。
notion image
notion image

死信消息消费者

现在消息在死信队列中等待被消费,写一个消费者进行消费即可

结果

notion image

队列达到最大长度导致死信

前面说过导致消息进入死信队列有三中情况,这次演示当队列达到最大长度导致的死信。
在创建队列的时候可以设置队列最大长度
重新创建队列,并且指定队列最大长度。
notion image
notion image
重新发送10条消息,正常就是死信4条,正常队列 6 条
notion image
image-20230617172259718

消息被拒绝导致死信

可以看到拒绝了一条消息,放入死信队列了,并且这条消息是 info5
notion image
notion image
比特位计数检测大写字母
Loading...