什么是死信队列
DLX 。Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。
消息成为死信的条件
- 队列长度超出限制
- 消息过期
- 消费端拒绝签收并不让消息重返队列
代码演示
- 创建正常交换机和正常队列
@Bean("testExchange")
public Exchange testExchange() {
return ExchangeBuilder.topicExchange(TEST_EXCHANGE).durable(true).build();
}
@Bean("testQueue")
public Queue testQueue() {
return QueueBuilder.durable(TEST_QUEUE).build();
}
- 创建死信交换机和死信队列
@Bean("dlxExchange")
public Exchange dlxExchange() {
return ExchangeBuilder.topicExchange(DLX_EXCHANGE).durable(true).build();
}
@Bean("dlxQueue")
public Queue dlxQueue() {
return QueueBuilder.durable(DLX_QUEUE).build();
}
- 死信队列和死信交换机绑定
@Bean
public Binding bindingDlxQueue(@Qualifier("dlxQueue") Queue queue, @Qualifier("dlxExchange") Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("test.dlx").noargs();
}
- 正常队列绑定死信交换机
@Bean("testQueue")
public Queue testQueue() {
return QueueBuilder.durable(TEST_QUEUE)
.maxLength(5)
.ttl(10000)
.deadLetterExchange(DLX_EXCHANGE)
.deadLetterRoutingKey("test.dlx")
.build();
}