延迟队列

日常学习小结,不计内容、不计形式。

场景提问:
  1. 12306订票后,超时未付款,则取消预订或消息提示,如何实现?
  2. 美团下单后未付款,超时未付款,取消订单或短信提示,如何实现?
延迟队列
1、 DB轮询
  • 简单实现:创建定时任务,定时扫描DB,将记录的创建时间与现在时间对比,判断是否超时。
  • 优点:实现简单、无技术难点、异常恢复方便、支持分布式\集群开发。
  • 缺点:增加DB负担,性能差,实时性差。
2、DelayQueue(jdk延迟队列)
  • 简单实现:放进DelayQueue的对象必须实现Delayed接口,重写排序方法,将先过期的放在队首。通过take()或poll()取超时的任务。
  • 优点:实现简单、性能较好
  • 缺点:基于jdk内存,异常恢复难,分布式\集群实现能
3、redis-zsit
  • 简单实现:zsit(有序集合),每一个member都会有一个score,可以通过score排序。zadd()添加元素,可以将当前时间设为score,通过zrange()获取最小score的元素,判断有没有超时
  • 优点:异常恢复强、支持分布式\集群实现、可扩展
  • 缺点:增加redis维护、占用带宽
4、rabbitmq TTL+DLX
  • TTL:rabbitmq消息超时时间
  • DLX:私信队列
  • 简单实现:一般基于队列(区别于消息本身)设置消息的超时时间,及队列的私信队列,消息过期会进入私信队列,对私信队列的消息进行消费。
  • 优点:异常恢复强、支持分布式\集群实现、可扩展
  • 确定:增加rabbitmq维护、占用带宽
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值