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

简介

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

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

幂等的含义

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

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

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

为什么需要幂等

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

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

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

何时会触发重试

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

幂等的方案

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

方案1:分布式锁

概述

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

详述

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

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

方案2:数据库唯一索引

例1:注册用户

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

例2:创建订单

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

Java后端接口幂等的方案相关推荐

  1. Java后端接口自动生成神器 -- EasyYapi插件(Yapi接口管理工具在IDEA里的插件)

    Java后端接口自动生成神器 – EasyYapi插件(Yapi接口管理工具在IDEA里的插件) 一.先看效果 1.生成yapi文档的效果 2.生成postman格式数据并导入接口测试类后的效果(如p ...

  2. 微信小程序篇_01 微信小程序与Java后端接口交互

    微信小程序与Java后端接口交互 准备 创建后端项目 创建小程序项目 本文主要介绍小程序前后端数据的交互,实践演示. 准备 创建后端项目 我这里就创建一个SpringBoot项目作为演示. 在创建项目 ...

  3. 《Java后端性能调优实战方案手册》,看完至少阿里P7

    之前有朋友说,"我们公司的系统从来都没有经过性能调优,集成测试没问题后就上线了,上线后也几乎没出现过性能问题."其实没遇到性能问题不代表程序不存在性能问题,只能说明系统的访问量有点 ...

  4. 基于SpringBoot+Vue开发的前后端分离博客项目-Java后端接口开发

    文章目录 1. 前言 2. 新建Springboot项目 3. 整合mybatis plus 第一步:导依赖 第二步:写配置文件 第三步:mapper扫描+分页插件 第四步:代码生成配置 第五步:执行 ...

  5. postman测试java后端接口

    1 GET方式 注意:GET方式测试时,不要使用@RequestBody注解,前端的GET请求标准是URL传参 1.1 方式一,获取请求头中的数据 后端使用@RequestHeader ,可用于tok ...

  6. Java后端接口返回视频流,使用video组件播放视频,实现分段下载

    视频文件保存在不为人知的地方,总之前端不能直接访问的位置,需要通过后端接口取出来再返回给前端. 前端这样子播放 <video controls="controls" cont ...

  7. java后端接口防止表单重复提交

    导入依赖 <!-- aspectj --><dependency><groupId>org.aspectj</groupId><artifactI ...

  8. 微信小程序发布时需要校验违法违规内容、图片,Java后端接口

    直接上代码 package com.ink.manager.controller.weixin; import java.io.BufferedReader; import java.io.DataO ...

  9. 微信小程序开发笔记 支付篇④——基于微信支付SDK实现Java后端接口使用

    文章目录 一.前文 二.微信支付 Java SDK 三.示例 一.前文 微信小程序开发笔记--导读 微信支付-SDK与DEMO下载 先看README.md 二.微信支付 Java SDK 对微信支付开 ...

最新文章

  1. no判断 python yes_python的判断 - osc_kewb5r6m的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. ipvsadm使用简介
  3. 网络招聘“草莽时代”该结束了
  4. 在Visual Studio中构建启动时申请管理员权限的程序(UAC支持)
  5. Spring中的AOP(三)——基于Annotation的配置方式(一)
  6. 吴恩达《深度学习》 学习笔记1
  7. 直接访问WEB-INF目录下的JSP页面的方法
  8. php 显示图片,php随机显示图片的简单示例
  9. a标签去掉下划线_html常用标签、包含关系、常用术语,以及网页设计中的字体分类
  10. spark读取kafka数据_解决Spark数据倾斜(Data Skew)的N种姿势
  11. win10无法装载重装系统iso文件_华硕笔记本怎么自己重装系统|华硕笔记本自己装系统教程...
  12. Linux 常用函数
  13. 阿里云高级专家王林平:云数据库的运维体系构建
  14. 《HBase权威指南》读书笔记 第八章:架构,HFile格式
  15. Creo 由方程创建曲线
  16. Redis中文学习文档redis.cn
  17. WiRadius认证计费管理系统
  18. 主动降噪ANC(Active Noise Control)
  19. 重新实现reuseport逻辑,实现一致性哈希
  20. clickhouse优缺点总结

热门文章

  1. Ubuntu环境下vjudge系统搭建
  2. 尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)
  3. JLink V8刷固件方式 转载整合
  4. 【转载】Serverless 系列之(4): Serverless 的优点
  5. opencv 二值化 python_opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用...
  6. 如何为Kali Linux添加中文输入法?
  7. 图像处理——以支票识别为例
  8. win7_ahic改raid
  9. java基于SSM汽车俱乐部网站
  10. 一个介绍机顶盒、DVB、TS、SI的系统网站,简洁深刻