基于Redis的延时队列

之前有一篇文件讲到延时队列,用的是jdk的 DelayQueue实现的。

使用jdk的DelayQueue实现的缺点: 1.基于应用内存,重启或宕机后数据会丢失 2. 如果要集群,不好扩展

此处基于redis做一个可用性较高的延时队列。

Redisson中有延时队列的实现,可以直接拿来用

@Controller
@RequestMapping("order")
public class OrderController extends BaseController {

    /**
     * 下订单
     */
    @PostMapping()
    @ResponseBody
    public WSResponseVO doOrder(){
        //调用生成订单逻辑,并返回订单id
        String orderId = UUID.randomUUID().toString();
       RBlockingQueue<RedPacketMessage> blockingRedPacketQueue
                = redissonClient.getBlockingQueue("orderDelayQueue");
    
        RDelayedQueue<RedPacketMessage> delayedQueue
                = redissonClient.getDelayedQueue(blockingRedPacketQueue);

        
        //订单延时进入队列.延迟3秒后失效
        delayedQueue.offer(new MyDelayMessage("001A"), 3, TimeUnit.SECONDS);
    }

}

对于从队列中取元素消费跟使用jdk的差不多,只是队列要从redis中获取。其获取元素的API也是take().此处省略代码

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值