一、死信队列(dead_queue)
1、什么使死信队列?
死信队列存储死信消息,什么使死信消息(dead_message):
(1)、在队列中超时的消息
(2)、队列长度到达上限后,再存入的信息
(3)、消费端拒接的消息。basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false;
2、死信消息流转过程:
生产者将普通消息传入到普通交换机,普通交换机将消息分发到普通队列,当普通队列中的消息符合上述三个场景时,并不把消息彻底删除,而是再交给死信交换机,让死信交换机将死信消息转发到死信队列。
死信交换机也是普通的交换机,只不过是用来转发死信消息,而被叫做死信交换机
3、操作
普通队列要绑定普通交换机和死信交换机。
给队列设置一下参数,绑定死信交换机:x-dead-letter-exchange和x-dead-letter-routing-key
运行图:

使用springboot创建交换机和队列,使用浏览器界面也可以:
@Configuration
public class RabbitConfig {
private final String EXCHANGE="exchange";
private final String DEAD_EXCHANGE="dead_exchange";
private final String QUEUE="queue";
private final String DEAD_QUEUE="dead_queue";
// 创建一个普通交换机
@Bean
public Exchange exchange(){
return ExchangeBuilder.directExchange(EXCHANGE).build();
}
// 创建一个私信交换机
@Bean
public Exchange dead_exchange(){
return ExchangeBuilder.directExchange(DEAD_EXCHANGE).build();
}
// 创建一个普通队列
@Bean
public Queue queue(){
return QueueBuilder
.durable(QUEUE)
.withArgument("x-message-ttl",20000)
// 队列长度为10
.withArgument("x-max-length",10)
// 绑定死信交换机
.withArgument("x-dead-letter-exchange",DEAD_EXCHANGE)
// 绑定死信交换机的routingkey为error
.withArgument("x-dead-letter-routing-key","error")
.build();
}
// 创建一个死信队列
@Bean
public Queue dead_queue(){
return QueueBuilder

本文详细介绍了RabbitMQ的高级特性,包括死信队列的创建与测试,延迟队列的原理及实现,消息幂等性的保障策略,以及RabbitMQ集群的搭建,包括简单集群和镜像集群模式。最后讨论了使用HaProxy进行RabbitMQ集群的负载均衡配置。
最低0.47元/天 解锁文章
1107

被折叠的 条评论
为什么被折叠?



