Bootstrap

RabbitMQ延迟队列的实现——TTL+死信队列DLX

大伙可以到我的RabbitMQ专栏获取更多信息

demo示例这里拿

概述

什么是延迟队列

延迟队列,即消息到达队列后不会被立即消费,只有到达指定的时间后,才会被消费

场景:

  • 下单后,30分钟为结算,自动取消该订单,被锁商品重回库存
  • 新用户注册1小时之后,发短信问候

实现方式:

  • 定时器:以某个时间间隔去轮询订单表中的下单时间并于当前时间比对,超过30分钟就取消该订单。该方式不优雅,性能消耗大,数据库压力大。
  • MQ延迟队列:当用户下单之后,订单生成,就发送一条消息到MQ延迟队列,该消息30分钟之后才能被消费,在30分钟之后,该消息被消费端接收到,开始判断该订单是否已经支付,如果没有支付,就取消该订单。优雅!

很不巧

RabbitMQ没有提供延迟队列的功能,那怎么办呢?

那就是!TTL+死信队列组合的方式,实现和延迟队列一样的效果

;