随笔 - 15  文章 - 0  评论 - 0  阅读 - 561

随笔分类 -  订单未支付过期如何实现自动关单

日常开发中,我们经常遇到这种业务场景,如:外卖订单超 30 分钟未支付,则自动取订单;用户注册成功 15 分钟后,发短信息通知用户等等。这就延时任务处理场景。在电商,支付等系统中,一设都是先创建订单(支付单),再给用户一定的时间进行支付,如果没有按时支付的话,就需要把之前的订单(支付单)取消掉。这种类 以的场景有很多,还有比如到期自动收货,超时自动退款,下单后自动发送短信等等都是类似的业务问题
MQ消息
摘要:RocketMQ 延迟消息 延迟消息,当消息写入到 Broker 后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。在订单创建之后,我们就可以把订单作为一条消息投递到 rocketmq,并将延迟时间设置为 30 分钟, 这样30分钟后我们定义的 consumer 就可 阅读全文
posted @ 2024-08-29 17:01 坐在云上飘 阅读(20) 评论(0) 推荐(0) 编辑
Redisson分布式延迟队列
摘要:Redisson 是一个基于 redis 实现的 Java 驻内存数据网格,它不仅提供了一系列的分布式的 Java 常用对象,还提供了许多分布式服务。 Redisson 除了提供我们常用的分布式锁外,还提供了一个分布式延迟队列 RDelayedQueue,他是一种基于 zset 结构实现的延迟队列, 阅读全文
posted @ 2024-08-29 16:51 坐在云上飘 阅读(166) 评论(0) 推荐(0) 编辑
redis过期监听
摘要:redis 是一个高性能的 KV 数据库,除了用作缓存以外,其实还提供了过期监听的功能在 redis.conf 中,配置 notify-keyspace-events Ex 即可开启此功能。 然后在代码中继承 KeyspaceEventMessageListener,实现 onMessage 就可以 阅读全文
posted @ 2024-08-29 16:27 坐在云上飘 阅读(131) 评论(0) 推荐(0) 编辑
JDK延迟队列 DelayQueue
摘要:DelayQueue是JDK提供的一个无界队列,我们可以看到,DelayQueue队列中的元素需要实现Delayed,它只提供了一个方法,就是获取过期时间。 用户的订单生成以后,设置过期时间比如30分钟,放入定义好的DelayQueue,然后创建一个线程,在线程中通过while(true)不断的从D 阅读全文
posted @ 2024-08-29 16:17 坐在云上飘 阅读(56) 评论(0) 推荐(0) 编辑
定时任务
摘要:通过定时任务关闭订单,是一种成本很低,实现也很容易的方案。通过简单的几行代码,写一个定时任务,定期扫描数据库中的订单,如果时间过期,就将其状态更新为关闭即可 优点:实现容易,成本低,基本不依赖其他组件。 缺点:时间可能不够精确。由于定时任务扫描的间隔是固定的,所以可能造成一些订单已经过期了一段时间才 阅读全文
posted @ 2024-08-29 16:12 坐在云上飘 阅读(17) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示