大伙可以到我的RabbitMQ专栏获取更多信息
demo示例这里拿
概述
什么是延迟队列
延迟队列,即消息到达队列后不会被立即消费,只有到达指定的时间后,才会被消费
场景:
- 下单后,30分钟为结算,自动取消该订单,被锁商品重回库存
- 新用户注册1小时之后,发短信问候
实现方式:
- 定时器:以某个时间间隔去轮询订单表中的下单时间并于当前时间比对,超过30分钟就取消该订单。该方式不优雅,性能消耗大,数据库压力大。
- MQ延迟队列:当用户下单之后,订单生成,就发送一条消息到MQ延迟队列,该消息30分钟之后才能被消费,在30分钟之后,该消息被消费端接收到,开始判断该订单是否已经支付,如果没有支付,就取消该订单。优雅!
很不巧
RabbitMQ没有提供延迟队列的功能,那怎么办呢?
那就是!TTL+死信队列组合的方式,实现和延迟队列一样的效果。