简称DLX
如果一个queue设置了DLX,那么在rabbitmq的管理控制台中的这个queue上就会多个标志,如图:
边上还有DLK,是dead-letter-routing-key的缩写。
队列中的消息,有可能是'dead-lettered',字面意思就是'死信',当下面的这些情况发生时,信就被认为是‘死信’,这些死信会被送至另一个exchange,这个exchange就是DLX:
- The message is rejected (basic.reject or basic.nack) with requeue=false;
- The TTL for the message expires;
- The queue length limit is exceeded.
DLX默认是没有的,有两种方法设置,这里使用代码在声明队列的时候设置:
Queue.declare(
channel, "myqueue",
durable: true,
arguments: [
# 这里空字符串表示用default exchange,可以设置任意的exchange
{"x-dead-letter-exchange", :longstr, ""},
# 如果这个不设置, 默认使用这个消息的routing key
{"x-dead-letter-routing-key", :longstr, "my.error.message"}
]
)