原文网址:Java后端接口幂等的方案_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java后端接口幂等的方案。
接口幂等也是Java后端面试中常见的问题。
幂等的含义
对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。
对于查询操作,它自然是幂等的,不会对系统资源造成影响。
对于添加和修改操作,就要控制幂等性。
为什么需要幂等
以创建订单为例进行说明:
一个订单创建接口,第一次调用超时了,然后调用方重试了一次。虽然第一次超时了,但是实际可能创建成功了,再次调用接口重试,这时就会调用2次创建接口,会创建2个订单。
我们重试是想有一次成功的请求,如果真的减去2次库存,那就不满足需求。
何时会触发重试
实际上,这种重试一般发生在框架中,比如:RPC框架、MQ。
幂等的方案
如下方案可以多个一起使用。
方案1:分布式锁
概述
对这个请求的某个唯一值进行锁定。
详述
对于保存接口,很难判断这两次请求是由于重试导致的,不好对业务加锁。解决方案有:
- 使用链路追踪工具的traceId,比如:skywalking
- 对所有的请求都添加一个唯一的id,比如雪花算法id
方案2:数据库唯一索引
例1:注册用户
将用户名的数据库字段设置唯一索引。
例2:创建订单
将用户名+商品id+付款状态设置唯一索引。即:用户的未付款的某种商品只能有一个。
转载:https://blog.csdn.net/feiying0canglang/article/details/127144806
查看评论