接口幂等+防重复提交+失败重试
1、接口幂等
接口幂等性就是用户对同一接口发起了一次或多次请求之后,对数据的影响是不变的,不会因为多次请求而产生不同的结果。
实现方案:
调用方传:参数+UUID,当接口请求参数和UUID生成key,存到Redis状态为处理中,当处理完成后,将状态置为失败或者成功,并且把接口UUID持久化到数据库,并且设置redis的key过期时间,因为有可能因为处理中时线程中断,没来得及设置redis的状态为失败。所以要加个过期时间,第二次请求先查数据在确定是否生成新的交易。
这个UUID,由前端页面提供,最好是页面有轮动UUID都重新生成。
2、重复提交:是指在一段时间内,只能提交一次请求。
用户重复提交:一般是指用户填写好表单信息后,由于响应较慢,从而多次点击提交按钮。
处理方案:
相同的参数,请求进redis,如果几秒内多次请求直接拒绝掉,设置过期时间,比如最多相同key只能2秒请求一次。这样就可以防止重复提交数据了。
3、失败重试:指分布式项目中,被调用方出现超时或异常时,触发了调用方的重试补偿机制。
如果对于失败的情况,明确失败,可以手动清楚redis中的key。其实和幂等类似