如何防止重复提交订单?
重复提交原因
其实原因无外乎两种:
- 一种是由于用户在短时间内多次点击下单按钮,或浏览器刷新按钮导致。
- 另一种则是由于Nginx或类似于SpringCloud Gateway的网关层,进行超时重试造成的。
常见解决方案
方案一:提交订单按钮置灰
这种解决方案在注册登录的场景下比较常见,当我们点击”发送验证码“按钮的时候,会进行手机短信验证码发送,且按钮就会有一分钟左右的置灰。
有些经验不太丰富的同学,通常会简单粗暴地把这个方案直接照搬过来。
但这种方案只能解决多次点击下单按钮的问题,对于Nginx或类似于SpringCloud Gateway的超时重试所导致的问题是无能为力的。
当然,这种方案也不是真的没有价值。它可以在高并发场景下,从浏览器端去拦住一部分请求,减少后端服务器的处理压力。
说到底,“下单防重”的问题是属于“接口幂等性”的问题范畴。
幂等性
接口幂等性是指:以相同的参数,对一个接口进行多次调用,所产生的结果和一次调用是完全相同的。
下面的情况就是幂等的:
student