小电商的延时队列设计概要

基于Redis实现的延迟队列
应用场景

未支付订单定时取消关闭
检测退款的订单的第三方退款状态
余额支付回调(通知概率=2n+n)
订单15天后自动评价
……

设计实现
传统实现
使用redis的特性实现,对普通的传统扫表优化
设计目标
可靠性:延迟队列保证被消费一次
系统结构及实现要点

job(json{uuid,job_id,job_name,job_data})

关闭未支付的订单
检测第三方退款状态
余额支付回调

延迟队列(redis的zset)

结构:score:过期时间戳;value:job_id

轮询延迟队列,将分发到各个消息队列

value = zrangebyscore(key, 0,now_time, start=0, num=1)
如果value空值,则sleep(1)

如果value非空,则取出value,result = zrem(key, value)
如果result为真,则rpush相关的队列

执行消息队列(reidis的list)

关闭未支付的订单
检测第三方退款状态
余额支付回调

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理