比如有这样的场景,用户下单后,如果30分钟内不支付,则把用户的订单取消。
1.定时任务扫描全表。
2.消息延迟投递。
3.一天的定时任务 + 用户触发判断。
这个就是具体业务实现了,如在创建订单时写上订单自动取消时间,然后每几秒钟轮训取消时间小于等于当前时间且未支付的订单,然后执行你的取消业务即可!
elastic-job是不支持,如果你想用任务解决的话,可以用1,2
1.队列解决
redis key expire监听机制(pub/sub)
队列延时消息(rabbitmq等)
2.任务
1.quartz(支持单个任务或批处理)
2.LTS(分布式,支持单个任务或批处理)
3.elastic-job(分布式,私网云,批处理)
订单创建之后,把订单信息(订单ID、订单创建时间、过期时间)加载到缓存(Redis等),定时任务程序每隔10秒轮训一次,将已过期的订单的取消状态更新到数据库(更新时先检查订单状态,如果订单是已支付则忽略更新)。
如果期间,订单支付成功了,则从缓存中移除订单信息。
定时器任务,调度应该也是轮询的。
spring定时任务,隔一定时间执行一次检查未支付订单,过订单超时修改状态
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(8)
1.定时任务扫描全表。
2.消息延迟投递。
3.一天的定时任务 + 用户触发判断。
这个就是具体业务实现了,如在创建订单时写上订单自动取消时间,然后每几秒钟轮训取消时间小于等于当前时间且未支付的订单,然后执行你的取消业务即可!
elastic-job是不支持,如果你想用任务解决的话,可以用1,2
引用来自“09M73”的评论
1.队列解决
redis key expire监听机制(pub/sub)
队列延时消息(rabbitmq等)
2.任务
1.quartz(支持单个任务或批处理)
2.LTS(分布式,支持单个任务或批处理)
3.elastic-job(分布式,私网云,批处理)
引用来自“蓝水晶飞机”的评论
订单创建之后,把订单信息(订单ID、订单创建时间、过期时间)加载到缓存(Redis等),定时任务程序每隔10秒轮训一次,将已过期的订单的取消状态更新到数据库(更新时先检查订单状态,如果订单是已支付则忽略更新)。
如果期间,订单支付成功了,则从缓存中移除订单信息。
定时器任务,调度应该也是轮询的。
1.队列解决
redis key expire监听机制(pub/sub)
队列延时消息(rabbitmq等)
2.任务
1.quartz(支持单个任务或批处理)
2.LTS(分布式,支持单个任务或批处理)
3.elastic-job(分布式,私网云,批处理)
订单创建之后,把订单信息(订单ID、订单创建时间、过期时间)加载到缓存(Redis等),定时任务程序每隔10秒轮训一次,将已过期的订单的取消状态更新到数据库(更新时先检查订单状态,如果订单是已支付则忽略更新)。
如果期间,订单支付成功了,则从缓存中移除订单信息。
定时器任务,调度应该也是轮询的。
spring定时任务,隔一定时间执行一次检查未支付订单,过订单超时修改状态