架构设计 | 接口幂等性原则,防重复提交Token管理 (2)

絮叨一句:实际开发中,该流程是不会由页面多次提交完成,订单是不能重复提交的,下面会演示如何控制,这里业务是执行后推到完成,也可能业务向前清理,把整个流程置为失败,这里涉及关键状态判断,要选取一个状态作为成功或失败的标识,判断后续操作流程。在分布式系统中这种复杂流程最难处理的是分布式事务,最终一致性问题,后续再聊。

三、接口重复提交 1、表单重复提交

在实际情况中,接口如果处理时间过长,用户可能会点击多次提交按钮,导致数据重复。

常见的一个解决方案:在表单提交中隐藏一个token_id参数,一起提交到接口服务中,数据库存储订单和关联的tokenId,如果多次提交,直接返回页面提示信息即可。

2、演示案例

订单关联Token查询

@Service public class OrderServiceImpl implements OrderService { @Override public Boolean queryToken(OrderState orderState) { Map<String,Object> paramMap = new HashMap<>() ; paramMap.put("order_id",orderState.getOrderId()); paramMap.put("token_id",orderState.getTokenId()); List<OrderState> orderStateList = orderStateMapper.selectByMap(paramMap); return orderStateList.size() > 0 ; } }

测试接口

@RestController public class OrderController { @Resource private OrderService orderService ; @PostMapping("/repeatSub") public String repeatSub (OrderState orderState){ boolean flag = orderService.queryToken(orderState) ; if (flag){ return "请勿重复提交订单" ; } return "success" ; } } 四、源代码地址 GitHub·地址 https://github.com/cicadasmile/data-manage-parent GitEE·地址 https://gitee.com/cicadasmile/data-manage-parent

架构设计 | 接口幂等性原则,防重复提交Token管理

推荐阅读:数据和架构管理

序号 标题
A01   数据源管理:主从库动态路由,AOP模式读写分离  
A02   数据源管理:基于JDBC模式,适配和管理动态数据源  
A03   数据源管理:动态权限校验,表结构和数据迁移流程  
A04   数据源管理:关系型分库分表,列式库分布式计算  
A05   数据源管理:PostGreSQL环境整合,JSON类型应用  
A06   数据源管理:基于DataX组件,同步数据和源码分析  
A07   数据源管理:OLAP查询引擎,ClickHouse集群化管理  
C01   架构基础:单服务.集群.分布式,基本区别和联系  
C02   架构设计:分布式业务系统中,全局ID生成策略  
C03   架构设计:分布式系统调度,Zookeeper集群化管理  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgfsp.html