飞道的博客

Java后端接口幂等的方案

308人阅读  评论(0)

原文网址:Java后端接口幂等的方案_IT利刃出鞘的博客-CSDN博客

简介

        本文介绍Java后端接口幂等的方案。

        接口幂等也是Java后端面试中常见的问题。

幂等的含义

        对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。

        对于查询操作,它自然是幂等的,不会对系统资源造成影响。

        对于添加和修改操作,就要控制幂等性。

为什么需要幂等

以创建订单为例进行说明:

        一个订单创建接口,第一次调用超时了,然后调用方重试了一次。虽然第一次超时了,但是实际可能创建成功了,再次调用接口重试,这时就会调用2次创建接口,会创建2个订单。

        我们重试是想有一次成功的请求,如果真的减去2次库存,那就不满足需求。

何时会触发重试

        实际上,这种重试一般发生在框架中,比如:RPC框架、MQ。

幂等的方案

如下方案可以多个一起使用。

方案1:分布式锁

概述

        对这个请求的某个唯一值进行锁定。

详述

        对于保存接口,很难判断这两次请求是由于重试导致的,不好对业务加锁。解决方案有:

  1. 使用链路追踪工具的traceId,比如:skywalking
  2. 对所有的请求都添加一个唯一的id,比如雪花算法id

方案2:数据库唯一索引

例1:注册用户

        将用户名的数据库字段设置唯一索引。

例2:创建订单

        将用户名+商品id+付款状态设置唯一索引。即:用户的未付款的某种商品只能有一个。


转载:https://blog.csdn.net/feiying0canglang/article/details/127144806
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场