百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

如何解决接口幂等性(接口如何保持幂等性)

off999 2025-03-20 17:38 33 浏览 0 评论

前言:

接口幂等性是指一个接口在多次调用相同请求时,产生的结果与一次调用的结果相同。换句话说,无论请求被执行多少次,最终的效果都是一致的,不会因为多次调用而导致状态的变化。

为什么会产生接口幂等性问题?

  • 网络波动, 可能会引起重复请求
  • 用户重复操作,用户在操作时候可能会无意触发多次下单交易,甚至没有响应而有意触发多次交易应用
  • 使用了失效或超时重试机制(Nginx重试、RPC重试或业务层重试等)
  • 页面重复刷新
  • 使用浏览器后退按钮重复之前的操作,导致重复提交表单
  • 使用浏览器历史记录重复提交表单
  • 浏览器重复的HTTP请求
  • 定时任务重复执行
  • 用户双击提交按钮

解决接口幂等性问题

解决接口幂等问题,,只需要记住一句口令"一锁、二判、三更新",只要严格遵守这个过程,那么就可以解决并发问题。

一锁:第一步,先加锁。可以加分布式锁、或者悲观锁都可以。但是一定要是一个互斥锁!

二判:第二步,进行幂等性判断。可以基于状态机、流水表、唯一性索引等等进行重复操作的判断。

三更新:第三步,进行数据的更新,将数据进行持久化。

以下是个简单的示例:

//一锁:先加一个分布式锁
@DistributeLock(scene ="OEDER",keyExpression ="#request.identifier",expire = 3000)
 public orderResponse apply(orderRequest request){
OrderResponse response =new rderResponse);
OrderDTo orderDT0 =orderService.queryorder(request.getProduct),request.getIdentifier());
 //二判:判断请求是否执行成功过
if(orderDTo !=null){
    response.setsuccess(true);
    response.setResponseCode("DUPLICATED");
    return response;
}
   //三更新:执行更新的业务逻辑
   return orderservice.order(request);
  
}

三步需要严格控制顺序,确保加锁成功后进行数据查询和判断,幂等性判断通过后再更新,更新结束后释放锁。

一锁这个过程,建议使用Redis实现分布式锁,因为他是非阻塞的高效率的互斥锁。非常适合在幂等控制场景中。

二判这个过程,如果有操作流水,建议基于操作流水做幂等,并将幂等号作为唯一性约束,确保唯一性。如果没有流水,那么基于状态机也是可以的。

但是不管怎么样,数据库的唯一性约束都要加好,这是系统的最后一道防线。万一前面的锁失效了这里也能控制得住不会产生脏数据。

第一步加锁为了解决高并发场景下的幂等问题,如果没有高并发,不需要第一步了,就直接查询更新,再更新的时候做乐观锁控制就行了:

请求幂等与业务幂等

请求幂等:每次请求,如果参数一样,结果也要一样。

业务幂等:同一次业务请求,在拿到最终状态之后的每次请求,结果要保证一样。再没拿到最终状态。

比如,一次支付请求,如果支付返回处理中,或者系统异常等,我们需要重试,继续调用,直到他明确的返回支付成功,或者明确的无法成功的支付失败结果。

一般来说,在幂等请求中,应该如下返回:

success =true
responseCode = DUPLICATED

这样既能让别人知道是成功了,也能知道是因为幂等而导致的成功。

总结

接口幂等性问题也是在项目中经常考虑的点,做好接口幂等性对业务数据流控制至关重要的。在工作中大家可以参考上述方案进行接口幂等性控制。

相关推荐

密钥是什么意思(电脑不含密钥是什么意思)

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为两种:对称密钥与非对称密钥。对称密钥加密,又称私钥加密或会话密钥加密算法,即信息的发送方和接收方用同一个密钥去加密和解...

visio下载安装教程(visio下载流程)
  • visio下载安装教程(visio下载流程)
  • visio下载安装教程(visio下载流程)
  • visio下载安装教程(visio下载流程)
  • visio下载安装教程(visio下载流程)
u盘启动bios设置方法(优盘启动bios设置方法)

1.通过按键进入BIOS设置,可以实现U盘启动。2.进入BIOS设置的原因是为了修改启动选项,让电脑从U盘启动。通常情况下,电脑默认会从硬盘启动,而我们需要通过修改BIOS设置来改变启动顺序。3....

黑客网站免费盗号(黑客盗号专用软件)

我不是黑客,当然也不会盗号,请你注意以下,不要加游戏里人的qq,不要登录有病毒网页,不要去看游戏里的网站,不要占小便宜。他们会盗号因为他们有盗号器。我跟您说:这个的确很简单,第一:不要用什么...

如何下载小马激活工具(如何下载小马激活工具软件)
  • 如何下载小马激活工具(如何下载小马激活工具软件)
  • 如何下载小马激活工具(如何下载小马激活工具软件)
  • 如何下载小马激活工具(如何下载小马激活工具软件)
  • 如何下载小马激活工具(如何下载小马激活工具软件)
win732位系统激活(win732位系统怎么激活)

按组合按钮“win+r”打开“运行对话框”,输入命令“slmgr.vbs-xpr”,点击确定。发现系统未激活状态。在“此电脑”鼠标右键,打开属性。在开始菜单上,点击鼠标右键,选择命令提示符{管理员}...

windows7光盘安装(win7 光盘安装)
  • windows7光盘安装(win7 光盘安装)
  • windows7光盘安装(win7 光盘安装)
  • windows7光盘安装(win7 光盘安装)
  • windows7光盘安装(win7 光盘安装)
家庭无线网怎么修改密码(家庭无线网怎么修改密码没有电脑)

一般更改无线网络密码的方法(以家用无线路由器提供的无线网络为参考):1、打开浏览器输入路由器地址。无线路由器的设置地址一般为“192.168.0.1或192.168.1.1”。当然也有部分路由...

联想笔记本系统重装win10系统

联想笔记本win10系统重装系统可以在电脑设置中完成。 一、首先,打开联想笔记本进入win10系统,在系统桌面左下角找到“开始菜单”中的“设置”点击打开。   ...

vivo浏览器下载(vivo浏览器下载安装2022最新版)

您好!  很抱歉给您带来不便!建议您尝试以下方法哦;1、进入设置--更多设置--应用程序--全部找到该浏览器并清除该程序的数据试试哦!  2、您也可以讲该软件卸载掉进入设置--更多设置--应用程序...

mac电脑和windows区别(mac和window有什么区别)

1、首先从外观上说,mac笔记本大多是超薄,轻便,好看。而windows笔记本大多数来说那就较厚了。2、价钱方面,mac也更贵,低配的manbookpro也要九千以上。3、从最基本上来说,mac搭...

office2016手机版下载(office 2016手机版)
  • office2016手机版下载(office 2016手机版)
  • office2016手机版下载(office 2016手机版)
  • office2016手机版下载(office 2016手机版)
  • office2016手机版下载(office 2016手机版)
手机设置路由器上网(手机如何上网设置路由器)

首先,打开手机浏览器,输入路由器的IP地址和密码,进入路由器设置页面。进入后会自动进入【设置向导】,点击设置向导【下一步】。在上网页面,选择【PPPoE(ADSL虚拟拨号)】,点击下一步。点击后,在新...

office 2016激活工具(office professional 2016 激活工具)

word2016激活密钥有两种类型:永久激活码和KMS期限激活密钥。其中,永久激活密钥可以使用批量授权版永久激活密钥进行激活,如所示;而KMS期限激活密钥需要使用KMS客户端密钥进行激活,如所示。另外...

苹果zip文件怎么安装(ios安装zip)

ZIP文件一般是用于存储多个文件或文件夹的压缩包,因此在安装ZIP文件时需要解压缩文件并提取出其中的内容。具体而言,您可以按照以下步骤来安装ZIP文件:1.下载ZIP文件:从互联网上下载需要安装的Z...

取消回复欢迎 发表评论: