RabbitMQ 死信队列详解
死信队列概念
死信(Dead Letter)是指无法被正常消费或处理的消息。当消息在一个队列中变成死信后,它能被重新发送到另一个交换器中,这个交换器称为 DLX(Dead Letter Exchange),绑定 DLX 的队列称为死信队列(DLQ)。
消息变成死信一般由于以下几种情况:
- 消息被拒绝(Basic.Reject/Basic.Nack),并且设置 requeue 参数为 false。
- 消息过期。
- 队列达到最大长度。
基础配置
常量定义
public class Constants {
// 死信相关
public static final String NORMAL_QUEUE = "normal.queue";
public static final String NORMAL_EXCHANGE = "normal.exchange";
public static final String DL_QUEUE = "dl.queue";
public static final String DL_EXCHANGE = "dl.exchange";
}
声明队列和交换机并绑定关系
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public {
Queue {
QueueBuilder.durable(Constants.NORMAL_QUEUE)
.deadLetterExchange(Constants.DL_EXCHANGE)
.deadLetterRoutingKey()
.build();
}
DirectExchange {
ExchangeBuilder.directExchange(Constants.NORMAL_EXCHANGE).build();
}
Binding {
BindingBuilder.bind(queue).to(exchange).with().noargs();
}
Queue {
QueueBuilder.durable(Constants.DL_QUEUE).build();
}
DirectExchange {
ExchangeBuilder.directExchange(Constants.DL_EXCHANGE).build();
}
Binding {
BindingBuilder.bind(queue).to(exchange).with().noargs();
}
}


