现在程序员也是一个很吃香的职业,自从进入互联网时代之后,就出现了大量需要程序员的岗位,在码农的日常工作中,需要解决分布式高并发系统保证对外接口的幂等性这类问题。
为了解决接口超时方面的问题,通常会引入失败重试机制。请求接口超时了调用方可能会重发该请求,这样也会导致重复提交。再如,消息中间件在消费消息时,有时可能会读取到重复消息,如果处理不好,也会产生重复提交的情况。
可以加悲观锁,将把该条账户信息锁住,不允许并发操作。但是这种操作严格意义上来讲不是防幂等,只是确保这条数据不会因多线程并发而导致更新错误,但结果还是能确保数据的最终一致性。
在服务器端,生成一个唯一的标识符,将它存入session,同时将它写入表单的隐藏字段中,然后将表单页面发给浏览器,用户录入信息后点击提交。
很多时候 HTTP 客户端工具都默认开启超时重试的机制,尤其是第三方调用接口时候,为了防止网络波动超时等造成的请求失败,都会添加重试机制,导致一个请求提交多次。
针对客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用 Token 的机制实现防止重复提交。
如果 Key 存在且 Value 匹配就执行删除命令,然后正常执行后面的业务逻辑。如果不存在对应的 Key 或 Value 不匹配就返回重复执行的错误信息,这样来保证幂等操作。
领取专属 10元无门槛券
私享最新 技术干货