1. 死信队列
1.1 什么是死信队列?
死信(“Dead Letter”),是RabbitMQ中的一种消息机制,当你在消费消息时,死信主要是以下几种原因产生:
- 消息被消费者否定确认,使用channel.basicNack或channel.basicReject,并且 requeue 属性被设置未false
- TTL过期的消息
- 队列消息数量超过最大队列长度
1.2 原理图:
1.3 实例:
仓库地址:https://github.com/Tooi6/demo-springboot/tree/master/rabbitmq-deadletter
1.4 死信队列参数
参数 | 功能 |
---|---|
x-dead-letter-exchange | 声明当前队列绑定的死信交换机 |
x-dead-letter-routing-key | 声明当前队列的死信路由key |
2. 延时队列
2.1 什么是延时队列
延时队列就是用来存放需要在指定时间被处理的元素的队列。
2.2 RabbitMQ 如何实现延时队列
RabbitMQ 本身是不支持延时队列的,但我们可以利用TTL机制和死信队列的来实现延时队列的效果。
下面是延时队列的架构图:
原理: 生成者产生一条延时消息(设置TTL时间),根据需要延时时间的不同,利用不同的routingkey将消息路由到不同的延时队列,每个队列都设置了不同的TTL属性,并绑定在同一个死信交换机中,消息过期后,根据routingkey的不同,又会被路由到不同的死信队列中,消费者只需要监听对应的死信队列进行处理即可。
2.1 实例:
仓库地址:https://github.com/Tooi6/demo-springboot/tree/master/rabbitmq-delayqueue