死信队列
逻辑图
死信队列
DLX(Dead Letter Exchange)死信交换机:当一个队列里的消息成为死信时,会将这些消息发送到另外一个队列,这个另外的一个队列就是被人为的规定为死信队列,其实就是一个普通的队列,由于 RabbitMQ 是通过交换机来绑定队列的,所以死信队列在 RabbitMQ 里就是指死信交换机
- 死信交换机与死信队列和普通的交换机与队列并无不同,只是人为规定该交换机/队列为死信交换机/死信队列
- 因为其他的一些队列软件并没有交换机的概念,所以 RabbitMQ 里沿用了死信队列的叫法,但是在 RabbitMQ 里实际指的是死信交换机和死信队列
如何成为死信
- 消息过期
- 队列长度达到限制
- 消费者拒绝消费 basicNack,并且拒绝将消息放入原队列 requeue=false
SpringBoot 整合
-
声明一个交换机,声明队列,并绑定,与普通的交换机绑定队列没区别
-
在某一个队列声明的时候绑定死信队列
-
queue.addArgument("x-dead-letter-exchange","死信交换机名称"); queue.addArgument("x-dead-letter-routing-key","路由key名称");
-
相当于把某一个队列作为生产者,来绑定死信交换机,正常的生产者投递消息时需要指定交换机名称和路由键,所以队列绑定时也指定
-
注意如果队列声明改变了,先将队列删除掉
-
外链图片转存中…(img-E3dXmqSc-1725520879273)]