美文网首页
订单关闭退款超时定时任务方案记录

订单关闭退款超时定时任务方案记录

作者: 在南方的北方人_Elijah | 来源:发表于2018-12-13 16:15 被阅读29次

    背景

    需求

    • 下订单后未付款订单24小时关闭
    • 申请退款后72小时后 验证是否订单已处理 未处理则可退款 否则撤销退款

    问题描述

    • serviceA 将会多实例部署,定时器时钟乱序,会导致重复添加退款任务,也会导致serviceA重复消费退款任务

    解决方案

    1. 用户申请退款后,将待退款订单存入mongo
    2. 设置定时器获取mongo待退款订单,逐个push入redis,由于需要保证只有一个serviceA实例添加任务,redis中使用sendIfAbsent 设置一个信号量锁,并设置超时时间,以免serviceA死掉后,无法释放锁,以此保证单个实例生成任务。
    3. 弹出任务多实例消费,未到时任务不放回队列,等待下一次任务重新生成。
      到时任务处理退款逻辑。处理逻辑时若发生异常,则设置mongodb中的异常次数字段,以此来判断重试次数,重试5次以上则存储异常数据,不在进行重试,并且报警。
    退款流程.png

    代码还未抽象出来,后续会上传github
    如有人看到此文章,有更好的想法,欢迎留言

    相关文章

      网友评论

          本文标题:订单关闭退款超时定时任务方案记录

          本文链接:https://www.haomeiwen.com/subject/eyhbhqtx.html