RabbitMQ延时队列
[ 参考文献 ] : https://juejin.cn/post/7048936544207372324
实现逻辑
在电商行业中,通常都会有一个需求:订单超时未支付,自动取消该订单。那么通过RabbitMQ实现的延时队列就是实现该需求的一种方式。
RabbitMQ本身是具有死信队列
和死信交换机
属性的,延时队列
可以通过死信队列和死信交换机来实现。
死信的条件
- 消息被消费者拒绝(basic.reject 或者 back.nack),且 requeue=false;
- 消息过期,因为队列设置了TTL(Time To Live)时间;
- 消息被丢弃,因为超过了队列的长度限制。
延时队列的实现流程
- 创建"死信交换机";
- 创建"死信队列","死信队列"没有消费者;
- 给"死信队列"设置"死信交换机"及死信路由key;
- 创建"死信下游队列";
- 给"死信下游队列"绑定"死信交换机"及路由key;
- 发布消息到"死信队列",并设置TTL(延时时间);
- 消费"死信下游队列"。