前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目上发现出现很多重复订单,怎么处理与预防?

项目上发现出现很多重复订单,怎么处理与预防?

原创
作者头像
天下之猴
发布2024-09-03 16:42:22
3360
发布2024-09-03 16:42:22
举报

出现原因

  1. 用户提交多次,没有做幂等性校验
  2. 中间件超时重试,导致出现重复订单

防止订单重复提交

在用户提交订单的操作上我们就可以做好预防处理,常用方法如下:

前端

按钮防止重复触发,可以从用户端拦截,减少后端服务器压力

后端

方案一:接口合法性判断

如果别人直接写脚本直接通过接口访问的话,我们就需要从后端入手了,常用方法如下每次向接口访问时需要在接口后面添加token或者用于校验的字符串,用于判断该接口是合法的,例如:前端访问生成订单的接口时,首先从服务器拿到合法令牌,然后再将拿到的合法令牌添加到订单生成接口中,再订单生成的业务生判断该令牌是否合法,合法则生成订单,该操作防止了同一用户短时间访问同一接口多次, 再生成合法令牌的操作中可以添加对访问对象的判断,如果访问了多次则对该IP进行相应的处理

方案二:预生成全局唯一订单号

那么这时候就有人说了,如果还是有重复请求到达我的后端,我该如何处理呢,比如订单号通过uuid生成的,我已经通过uuid生成了多个订单号咋办呢,那么这时候就可以通过方案二进行处理了

用户进入下单页面时,后端提前生成uuid作为订单号传递给前端,用户提交订单时,请求接口中添加进该全局唯一订单号,后面再从数据库中添加订单时,判断订单号是否存在再添加

但是方案二的订单号需要靠后端自己维护,在分布式中实现起来可能有一定难度,实际中的订单号如果是分布式后端外加分库分表的话那么一般可能通过中间件进行维护,如果有了解的佬可以分享一下

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 出现原因
  • 防止订单重复提交
    • 前端
      • 后端
        • 方案一:接口合法性判断
        • 方案二:预生成全局唯一订单号
    相关产品与服务
    消息队列 TDMQ
    消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档