一口气说出 6种 延时队列的实现方法,面试官也得服

54d665c99223ae0dd080d62de635adb7.png

若有收获,请记得分享和转发哦

今天给大家整理分享一道面试题:“如何实现延时队列?”。

下边会介绍多种实现延时队列的思路,其实哪种方式都没有绝对的好与坏,只是看把它用在什么业务场景中,技术这东西没有最好的只有最合适的。

一、延时队列的应用

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

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

1、订单成功后,在30分钟内没有支付,自动取消订单

2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。

3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存

4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等

。。。。

上边的这些场景都可以应用延时队列解决。

二、延时队列的实现

我个人一直秉承的观点:工作上能用JDK自带API实现的功能,就不要轻易自己重复造轮子,或者引入三方中间件。一方面自己封装很容易出问题(大佬除外),再加上调试验证产生许多不必要的工作量;另一方面一旦接入三方的中间件就会让系统复杂度成倍的增加,维护成本也大大的增加。

8cc7ac26dac0585c512beb1cba932713.png

1869a160d72e1edb12e6754da6c16a4b.png

542e6d1063d6d8427674a870bf040f4a.png

45c5ca0e8fc793b8d7c4b665f1bc2104.png

5299b31345b840424464be1d0c745808.png

720575a33bab7fafeb1d5248bae13a97.png

340cebee15663d2653538e800aeced9c.png

0813f66ec2b24f225547f44b1582173b.png

77a7206e4627f5529de56e53afd159cb.png

ca4608202117e1c78fe3ba69c718d7a1.png

ddac5ee66171c3af9e755acc1e419dd9.png

b6c56319a87770654d392da09be9345a.png

fd82bddffe9aea392ee8cde034f5baf7.png

a39c4fb39280c37700fcde0687ab87d4.png

09c5ddc1be473e036b0c5d1e2be9a869.png

64e593d81e407e87d8854cfdd01fbe79.png

dfd0331ff1c854cdc64abfa77ac83c6b.png

a426e1afdd9d5ea9deef7d7e40abde1e.png

order2  10s 后执行

总结

为了让大家更容易理解,上边的代码写的都比较简单粗糙,几种实现方式的demo已经都提交到github 地址:https://github.com/chengxy-nds/delayqueue,感兴趣的小伙伴可以下载跑一跑。

这篇文章肝了挺长时间,写作一点也不比上班干活轻松,查证资料反复验证demo的可行性,搭建各种RabbitMQRedis环境,只想说我太难了!

可能写的有不够完善的地方,如哪里有错误或者不明了的,欢迎大家踊跃指正!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值