关于倒计时任务?

er2017 发布于 2017/05/27 09:49
阅读 385
收藏 0

比如有这样的场景,用户下单后,如果30分钟内不支付,则把用户的订单取消。

 

加载中
0
l
liun

spring定时任务,隔一定时间执行一次检查未支付订单,过订单超时修改状态

0
红薯官方
红薯官方

订单创建之后,把订单信息(订单ID、订单创建时间、过期时间)加载到缓存(Redis等),定时任务程序每隔10秒轮训一次,将已过期的订单的取消状态更新到数据库(更新时先检查订单状态,如果订单是已支付则忽略更新)。

如果期间,订单支付成功了,则从缓存中移除订单信息。

 

定时器任务,调度应该也是轮询的。

0
开源中国总架构师
开源中国总架构师

1.队列解决

    redis key expire监听机制(pub/sub)

    队列延时消息(rabbitmq等)

2.任务

    1.quartz(支持单个任务或批处理)

    2.LTS(分布式,支持单个任务或批处理)

    3.elastic-job(分布式,私网云,批处理)

0
er2017
er2017

引用来自“蓝水晶飞机”的评论

订单创建之后,把订单信息(订单ID、订单创建时间、过期时间)加载到缓存(Redis等),定时任务程序每隔10秒轮训一次,将已过期的订单的取消状态更新到数据库(更新时先检查订单状态,如果订单是已支付则忽略更新)。

如果期间,订单支付成功了,则从缓存中移除订单信息。

 

定时器任务,调度应该也是轮询的。

这样的话,有点不精确吧。

0
er2017
er2017

引用来自“09M73”的评论

1.队列解决

    redis key expire监听机制(pub/sub)

    队列延时消息(rabbitmq等)

2.任务

    1.quartz(支持单个任务或批处理)

    2.LTS(分布式,支持单个任务或批处理)

    3.elastic-job(分布式,私网云,批处理)

如何用任务,比如elastic-job是实现不了动态添加任务的吧?

开源中国总架构师
开源中国总架构师
elastic-job是不支持,如果你想用任务解决的话,可以用1,2
0
YANGL
YANGL

这个就是具体业务实现了,如在创建订单时写上订单自动取消时间,然后每几秒钟轮训取消时间小于等于当前时间且未支付的订单,然后执行你的取消业务即可!

0
开心的闪电芦苇

1.定时任务扫描全表。

2.消息延迟投递。

3.一天的定时任务 + 用户触发判断。

返回顶部
顶部