本书未发布

生成订单 30 分钟内未支付自动取消

未匹配的标注

数据库轮询

不是很推荐的一种方式,需要定时扫描数据库,借助定时任务工具,如果是多服务部署,那么还需要考虑分布式调度,推荐 xxt 一 job 。缺点在于数据库压力大,而且会有延迟性。比如每隔 3 分钟进行扫描一次,最坏的情况就定那个取消支付要延迟 3 分钟才行。

JDK 的延迟队列

利用 JDK 自带的无界阻塞队列 oetayQuou 。来实现,该队列只有在延迟期满的时候才能从中获取元素,放入 ootayQuoue 中的对象,是必须实现 oetayed 接口的。这种方式优点在于延时低,缺点就是一旦服务重启,之前放入队列的任务全部丢失。如果有大量的任务,可能会造成。。 m 。代码复杂度也比软高。

时间轮算法

时间轮算法可从类比于时钟,如下图箭头(指针)按某一个方向按固定须率轮动,每一次跳动称为一个 tick 。这样可从看出定时轮由个 3 个重要的属性参数, ticksperwheeL (一轮的 tlck 数) , tickDuration (一个 tick 的持续时间)从及 timeUnit (时间单位),例如当 ticksperwheeL=60 , tickDuration=1 , timeUnit=秒,这就和现实秒针走动完全类似了。可从用 Netty 的 HashedWheelTimer 来进行使用,缺点和延迟队列一样。

生成订单 30 分钟内未支付自动取消

使用消息队列

未用 rabbitMQ 的延时队列。 RabbitMQ 具有从下两个特性, RabbitMQ 可从针对 Queue 和 Message 设置 x-message-tt ,来控制消.息的生存时间,如果超时,则消.息变为 dead Letter 。 RabbitMQ 的 Queue 可从配置 x-dead-Letter-exchangex-dead-Letter-routing-key (可选)两个参数,用来控制队列内出现了 deadletter ,则按照这两个参数重新路由。结合从上两个特性,就可从模拟出延迟消息的功能。优点就是高效,可从利用 rabbitmq 的分布式特性轻易的进行横向扩展,消息支持持久化增加了可靠性。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~