如何设计一个延迟队列

延时队列的应用

  什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。

  延时队列在项目中的应用还是比较多的,尤其像电商类平台。

  1. 订单成功后,在30分钟内没有支付,自动取消订单 外卖平台发送订餐通知,下单成功后60s给用户推送短信。 如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存 淘宝新建商户一个月内还没上传商品信息,将冻结商铺等。

   2. 订单完成后未评论,48小时后默认好评。

   3. 还有当用户在购买车票下单但是未付款,30分钟系统要取消订单。

  

 

 

 

 

 

延迟队列实现方案

   1. Redis延迟队列。

  2. DelayQueue延时队列

    JDK中提供了一组实现延迟队列的API,位于Java.util.concurrent包下DelayQueue。

  3. RabbitMQ 延时队列

    利用RabbitMQ做延时队列是比较常见的一种方式,而实际上RabbitMQ自身并没有直接支持提供延迟队列功能,而是通过 RabbitMQ 消息队列的 TTL和 DXL这两个属性间接实现的。

  4. 时间轮

    Kafka、Netty都有基于时间轮算法实现延时队列。

  5. Laravel 延迟队列

       

      https://github.com/haozu/delay-queue

posted @ 2021-02-12 01:46  songguojun  阅读(368)  评论(0编辑  收藏  举报