Skip to content
发布于 更新于

1. 什么是幂等方法 ​

同样的参数,经过多次调用,返回的结果都一样的,这样的方法,是幂等方法

2. 哪些场景需要幂等 ​

  • 前端重复提交表单,包括下单、投票
  • MQ消息重试

上述场景不管是网络抖动、报文发送方自带的重试机制,都应该是保证接口的幂等

3. 实现幂等的方式 ​

3.1. 数据库唯一键 ​

为数据库的表,建立组合的幂等键,在insert时,就会抛出重复key的异常。 适合于新增和删除的动作

3.2. 乐观锁 ​

使用版本号或时间戳实现乐观锁,更新前先查询出旧的版本号,更新时增加版本号相同的条件,进行更新时的幂等。

3.3. token防重 ​

同一个业务请求,分为两个阶段,

  • 阶段一:请求到一个token
  • 阶段二:发送业务请求(将token回传)

请求到了服务器,判断token是否存在,存在说明是第一次发送请求,可以通过,执行业务流程,删除token; token不存在时,说明先前已经处理过了,返回第一次处理过的结果。

适于于新增、更新、删除的操作

3.4. 唯一序列号 ​

上游给下游发送请求时,携带一个唯一业务主键,如在MQ消息体中携带, 唯一键,在MQ消费异常时,自动重试时,保证同一份数据,不会被多次消费。

4. 幂等方法的实现:一锁二判三更新 ​

img.png

5. 参考 ​

基于 VitePress + GitHub Actions 自动部署