消息进入死信队列的条件
- 队列消息数量到达限制;比如给队列最大只能存储10条消息,当第11条消息进来的时候存不下了,第11条消息就被称为死信
- 消费者拒接消费消息,basicNack/basicReject,并且
不把消息重新放入原目标队列,requeue=false
; - 原队列存在消息过期设置,消息到达超时时间未被消费;
队列绑定死信交换机(重点,也就是在正常队列里设置者两个参数)
给队列设置参数: x-dead-letter-exchange 和 x-dead-letter-routing-key
xml配置死信交换机
<!--
死信队列:
1. 声明正常的队列(test_queue_dlx)和交换机(test_exchange_dlx)
2. 声明死信队列(queue_dlx)和死信交换机(exchange_dlx)
3. 正常队列绑定死信交换机
设置两个参数:
* x-dead-letter-exchange:死信交换机名称
* x-dead-letter-routing-key:发送给死信交换机的routingkey
-->
<!--
1. 声明正常的队列(test_queue_dlx)和交换机(test_exchange_dlx)
-->
<rabbit:queue name="test_queue_dlx" id="test_queue_dlx">
<!--3. 正常队列绑定死信交换机-->
<rabbit:queue-arguments>
<!--3.1 x-dead-letter-exchange:死信交换机名称-->
<entry key="x-dead-letter-exchange" value="exchange_dlx"/>
<!--3.2 x-dead-letter-routing-key:发送给死信交换机的routingkey-->
<entry key="x-dead-letter-routing-key" value="dlx.hehe"></entry>
<!--4.1 设置队列的过期时间 ttl-->
<entry key="x-message-ttl