1.什么是死信队列(专门用来存放死信的队列)
当一个队列中的消息变成死信以后,该消息被重新publish到另一个交换机(该交换机叫做死信交换机)上,交换机将消息发送到指定的队列(该队列叫死信队列)中。
2. 消息什么时候会变成死信
1)消息被拒绝(basic.reject / basic.nack),并且requeue = false
2)消息TTL过期(本文将演示消息过期形式)
3)队列达到最大长度
3. 死信队列可以用来做什么:
场景1:订单30分钟内未支付,将订单取消(消息过期时间设置30分钟)。
4. 实现:创建交换机
1.创建交换机和队列,并将他们绑定(如果不知道如何创建交换机和队列请参考我的另一篇文章)
1.创建私信交换机(正常交换机创建操作)
2.创建死信队列(正常队列创建操作)
3.将死信队列和死信交换机进行绑定
4.创建交换机testexchange4
- 创建队列(设置消息过期时间和死信交换机)
4. 代码实现
消息消费者:(消费死信队列)
# 创建监听死信队列的消息
@Component
public class consumer {
@RabbitListener(queues = "deadqueuqe")
public void msg(Message message) {
String str = new String(message.getBody());
System.err.println("这是死信队列:"+str);
}
}
消息生产者:
@Component
public class provider {
@Autowired
private RabbitTemplate rabbitTemplate;
@Bean
public void sendMessage() {
String msg = "this is a message"+ new Date();
System.err.println("发送消息"+msg);
rabbitTemplate.convertAndSend("testexchange4","", msg);
}
}
效果
5.Demo地址
我是Tz,想把我遇到的问题都分享给你~~~
想看更多精彩内容,请关注我的微信公众号