[ 参考文献 ] : https://juejin.cn/post/7048936544207372324

实现逻辑

​ 在电商行业中,通常都会有一个需求:订单超时未支付,自动取消该订单。那么通过RabbitMQ实现的延时队列就是实现该需求的一种方式。

​ RabbitMQ本身是具有死信队列死信交换机属性的,延时队列 可以通过死信队列和死信交换机来实现。

死信的条件

  • 消息被消费者拒绝(basic.reject 或者 back.nack),且 requeue=false;
  • 消息过期,因为队列设置了TTL(Time To Live)时间;
  • 消息被丢弃,因为超过了队列的长度限制。

延时队列的实现流程

  1. 创建"死信交换机";
  2. 创建"死信队列","死信队列"没有消费者;
  3. 给"死信队列"设置"死信交换机"及死信路由key;
  4. 创建"死信下游队列";
  5. 给"死信下游队列"绑定"死信交换机"及路由key;
  6. 发布消息到"死信队列",并设置TTL(延时时间);
  7. 消费"死信下游队列"。