接口防重复提交的技术解决方案
Posted buguge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口防重复提交的技术解决方案相关的知识,希望对你有一定的参考价值。
【本文完善中...】
无论是http接口,还是rpc接口,防重复提交(接口防重)都是绕不过的话题。
重复提交与幂等,既有区别,又有联系。幂等的意思是,对资源的一次请求与多次请求,作用是相同的。HTTP的POST方法是非幂等的。如果程序处理不好,重复提交会导致非幂等,引起系统数据故障。防重复提交,要通过技术手段来实现。保证幂等性既要通过技术手段来实现,又要有对业务数据的验证。
常见的B/S场景的重复提交,用户手抖或因为网络问题,服务端在极短时间内收到同样的http请求。
rpc接口的重复提交,一种是不恰当的程序调用,即程序漏洞导致重复提交。在一种,比如拿dubbo来说,因为网络传输问题,会导致重试调用。
防重提交的方案,常见的是加锁。java单体应用可以用语言本身的synchronized锁机制。分布式系统,一般是借助redis或zk等分布式锁。
以上是关于接口防重复提交的技术解决方案的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
Spring Cloud项目如何防止重复提交,防重复提交幂等校验,Redis+aop+自定义Annotation实现接口