美文网首页并发编程
DelayQueue(3)订单过期

DelayQueue(3)订单过期

作者: 指尖架构141319 | 来源:发表于2019-04-15 15:06 被阅读0次

1.DelayQueue能做什么?

在我们的业务中通常会有一些需求是这样的:

    1. 淘宝订单业务:下单之后如果三十分钟之内没有付款就自动取消订单。
    1. 饿了吗订餐通知:下单成功后60s之后给用户发送短信通知。

那么这类业务我们可以总结出一个特点: 需要延迟工作
由此的情况,就是我们的DelayQueue应用需求的产生。

2.使用DelayQueue延迟队列实现订单的具体操作

  • 用户取消支付或支付异常后,把订单ID插入到内存的一个DelayQueue中,同时插入到Redis中。

  • 在规定时间内,用户再次进行支付,且支付成功,则从DelayQueue中删除,从Redis中删除。

  • 超过规定时间,DelayQueue中的订单ID出队,查询数据库,改关闭状态为异常,删除过期redis。

  • 如果在规定时间之内,web服务器重启过,则web服务器启动以后,从redis中读取待付款的订单,插入到DelayQueue

3.代码实现

监听器监听ioc容器中bean的初始化,使用多线程不断的从队列中拿出过期元素,并做相应处理。
假如系统宕机,我们会从redies中拿出还未过期的元素,并加入到队列中。


image.png
image.png

测试支付失败,将未支付的订单插入到延迟队列中,和写入redis中,等待过期时间,打印相应的日志信息


image.png

相关文章

网友评论

    本文标题:DelayQueue(3)订单过期

    本文链接:https://www.haomeiwen.com/subject/dyvuwqtx.html