基于 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)
关闭未支付的订单
检测第三方退款状态
余额支付回调