关于接口幂等性问题的简单总结

在业务中需要考虑接口幂等性的地方一般都是存在接口重复请求的逻辑

  • 前端重复提交:提交订单,用户快速重复点击多次,造成后端生成多个内容重复的订单。
  • 接口超时重试:对于给第三方调用的接口,为了防止网络抖动或其他原因造成请求丢失,这样的接口一般都会设计成超时重试多次。
  • 消息重复消费:MQ消息中间件,消息重复消费。

对于和web端交互的接口,我们可以在前端拦截一部分,例如防止表单重复提交,按钮置灰、隐藏、不可点击等方式。

但是前端做控制实际效益不是很高,那么后端要实现分布式接口的幂等性有哪些策略方式呢?

  • Token机制

    针对前端重复连续多次点击的情况,例如用户购物提交订单,提交订单的接口就可以通过 Token 的机制实现防止重复提交。

  • Redis

    Redis实现的方式就是将唯一序列号作为Key,value可以是你想填的任何信息。唯一序列号也可以是一个字段,例如订单的订单号,也可以是多字段的唯一性组合。(当然这里需要设置一个 key 的过期时间,否则 Redis 中会存在过多的 key。)具体步骤和上面的Token机制差不太多。调用具体业务逻辑之前先判断Redis中有无key,没有就add一个key,有就代表重复请求。

  • 状态机

    对于很多业务是有一个业务流转状态的,每个状态都有前置状态和后置状态,以及最后的结束状态。以订单为例,已支付的状态的前置状态只能是待支付,而取消状态的前置状态只能是待支付,通过这种状态机的流转我们就可以控制请求的幂等。假设当前状态是已支付,这时候如果支付接口又接收到了支付请求,则会抛异常或拒绝此次处理。

关于接口幂等性问题的简单总结相关推荐

  1. 接口幂等性的几种简单解决方案

    1.接口幂等性是什么 接口幂等性并不是数学中的幂等,而是对于用户来说不论网络波动或者刷新页面后重新操作某个动作等,最终导致对同一接口产生多次请求, 但是对于用户而言并没有产生影响.也就是说重复多次操作 ...

  2. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?

    点击关注公众号,Java干货及时送达 作者:超级小豆丁 链接:mydlq.club/article/94 一.什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两 ...

  3. SpringBoot 接口幂等性的实现方案

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:超级小豆丁 http://www.mydlq.clu ...

  4. Springboot + redis + 注解 + 拦截器来实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wangzaiplus www.jianshu.com/p/ ...

  5. springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://www.jianshu.com/p/6189275403ed 一.概念 ...

  6. 什么是接口幂等性?为什么会产生这个问题?如何保证接口幂等性?

    作者:三分恶 原文链接:https://cnblogs.com/three-fighter/p/14054749.html 博主负责的项目报了一个问题,用户操作回退失效.我们的设计里,操作回退是回到操 ...

  7. Spring Boot + Redis 实现接口幂等性 | 分布式开发必知!

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:http://tinyurl.com/y5k2sx5t >>阿里云8月最新 ...

  8. SpringBoot接口幂等性实现的4种方案!

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客:点 ...

  9. Sprinig Boot + Redis 实现接口幂等性,写得太好了!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 作者:wa ...

最新文章

  1. 图解C++虚函数 虚函数表
  2. python模块搜索路径 (sys.path)
  3. 联想确认再次裁员 称调整主要分布在海外
  4. linux echo命令
  5. 使用JavaScript将当前页面保存成PDF,支持图片和文字的保存
  6. python访问数据库
  7. 10.傅里叶变换——傅里叶变换、计算傅里叶变换_3
  8. DeprecationWarning:current URL string parser is deprecated, and will be removed in a future version.
  9. python语言应用章节答案_智慧树APPPython语言应用第十单元章节测试答案
  10. C++:使用vector::reserve来避免不必要的重新分配
  11. 用户体验测试的心得体会
  12. 计算机水平2018下半年模拟考试,2018年下半年程序员考试下午试题及答案
  13. JAVA-消息队列及分布式消息队列原理
  14. 百度火星坐标转wgs84
  15. php万年历月份处理_使用 PHP 写的万年历接口
  16. 使用腾讯云sms实现短信验证功能
  17. java 发邮件 乱码_JavaMail发送中文邮件乱码的解决 | 学步园
  18. 【Linux编程】一、Linux常见指令和权限理解(思维导图总结)
  19. win10无线网卡驱动怎么安装【系统天地】
  20. U盘、打印机泄密的隐患

热门文章

  1. Dos用户学Unix指南(1)
  2. 运动检测与跟踪之动态背景的更新
  3. BCH公式和李代数求导
  4. 适合学生党的蓝牙耳机选哪个?学生党最爱的几款蓝牙耳机
  5. mysql sql 不能为空_SQL为空和=空
  6. xlsxwriter进度条php,PHP导出Excel数据导出,前端进度条实现方式
  7. 【信奥题库 NOIP 2020 在线模拟赛 T4】三元组
  8. jQuery-源码阅读,JavaScript原生继承方式与jQuery中的继承
  9. 快速上手飞桨PaddleClas图像分类库
  10. 突发!又一MCU大厂暂停接单!