求一个定时取消订单的解决方案

2020-05-05 10:23:23 +08:00
 yangyuhan12138
目前我们的方案是 rabbitmq 的死信队列,并发不高还好,但是我们最近会搞一波促销活动,订单超时时间是 35 分钟,意思就是有 35 分钟时间窗口的订单都会进入死信队列,害怕把 mq 弄挂了...或者说 rabbitmq 有没有啥水平扩容的方案,我们现在的模式为镜像模式,三台机器存的是一样的内容,所以消息的上限还是为单台机器的容量

还有一个方案是刚刚搜到的,就是 redis 的 zset,用时间戳当 score,这个方案感觉还挺不错呢,有没有人用过

大佬们多多给点建议 谢谢大家了
12949 次点击
所在节点    程序员
90 条回复
hezeming
2020-05-06 16:27:48 +08:00
1.取消订单属于分钟级别的事件,定时任务扫库处理即可,修改订单状态,后续处理采用 MQ 异步处理
2.你都集群了,Job 肯定要加锁或者用分布式 Job 框架,不会有并发问题的,单机指定 fixedDelay 就可以了
owenliang
2020-05-06 16:51:20 +08:00
rocketmq
yaphets666
2020-05-06 18:46:52 +08:00
@evilic 本来就是啊
yuyu12
2020-05-06 21:34:15 +08:00
我把 XXL-Job 改造了一下,其实就是手动注册 job,把 cron 表达式改一下,易用些。就成了延时任务了。
Mirana
2020-05-07 00:00:28 +08:00
不管用啥 对自己的服务要有服务能力的准确评估啊
optional
2020-05-07 01:56:07 +08:00
延迟队列已经是最优解了,可以改的就是用 pull 模式而不是 push 模式或者单节点消费,降低数据库的负担。
lazyfighter
2020-05-07 15:25:14 +08:00
延时队列+1 ,死信队列是什么操作
feelinglucky
2020-05-07 16:56:00 +08:00
延时队列+1

不过需要注意流量二次波峰的问题,通常活动或者秒杀完事了以后如有 HPA 的话,集群缩容,这时候延时队列的满足条件请求过来可能会造成再次扩容
changdy
2020-05-08 12:08:06 +08:00
@pushback 大胆一点 去掉感觉.redis 的过期监听的 时间并不可靠... 并不是实时扫描的..
changdy
2020-05-08 12:22:17 +08:00
@yuyu12 和我想法类似..感觉 定时任务 之类的还是挺需要一个统一的管理...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/668600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX