什么是接口幂等?

接口幂等就是无论客户端调用服务端接口发起多少次请求,有且只有一次有效。

如何解决幂等问题呢?

1.暴露获取幂等token接口,且在此时存储redis、mysql、本地内存等(可根据具体业务场景选择token存储方式)

@Autowired
private RedissonClient redissonClient;private String createToken(){return UUID.randomUUID().toString().replace("-","");
}@GetMapping("/getLdempotentToken")public Response<String> getLdempotentToken(){RMapCache<String,String> rMapCache = redissonClient.getMapCache(LdempotentAspect.LDEMPOTENT_TONE);String token = createToken();rMapCache.put(token,token);return Response.ok(token);}
复制代码

2.客户端在请求接口前先获取幂等接口,然后在请求接口前写入请求头中.

key value
ldempotent_token ba4b441e75f2449792fce5eb0ccfa2ab

3.利用spring aop技术代码需要处理幂等接口。在执行接口之前验证客户端请求头中的幂等token,验证成功则删除token,验证失败则直接返回错误信息.

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Ldempotent {}
复制代码
@Slf4j
@Component
@Aspect
public class LdempotentAspect {public static final String LDEMPOTENT_TONE = "ldempotent_token";@Autowiredprivate RedissonClient redissonClient;@Pointcut("@annotation(com.fast.family.framework.core.redis.ldempotent.Ldempotent)")public void pointcut(){}@Around("pointcut()")public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {String token = Optional.ofNullable(WebUtils.getRequestHeader(LDEMPOTENT_TONE)).orElseThrow(() -> new LdempotentException(ResponseCode.LDEMPOTENT_ERROR.getCode(),ResponseCode.LDEMPOTENT_ERROR.getMsg()));RMapCache<String,String> rMapCache = redissonClient.getMapCache(LDEMPOTENT_TONE);Optional.ofNullable(rMapCache.get(token)).orElseThrow(() -> new LdempotentException(ResponseCode.LDEMPOTENT_ERROR.getCode(),ResponseCode.LDEMPOTENT_ERROR.getMsg()));rMapCache.remove(rMapCache.get(token));//token一次有效,所以在验证完后需删除return proceedingJoinPoint.proceed();}}
复制代码

那么按照上述步骤则可以保证接口幂等性(这种方式除了可以处理接口幂等,还能处理其他问题吗?哈哈哈哈哈哈)

关于如何在项目接口保证幂等性的一点思考相关推荐

  1. 高并发下如何保证接口的幂等性?

    前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题.本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考. 不知道你有没有遇到过这些场景: ...

  2. 高并发下如何保证接口的幂等性

    前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题.本文分享了一些 ,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考. 不知道你有没有遇到过这些场景: 有时我们在填写某些 f ...

  3. 分布式系统接口如何保证幂等性

    分布式系统接口如何保证幂等性 转载请注明出处:https://www.cnblogs.com/jajian/p/10926681.html 业务场景 公司有个借贷的项目,具体业务类似于阿里的蚂蚁借呗, ...

  4. 如何保证接口的幂等性?

    什么是幂等性?所谓幂等,就是任意多次执行所产生的影响均与一次执行的影响相同. 为什么会产生接口幂等性问题 在计算机应用中,可能遇到网络抖动,临时故障,或者服务调用失败,尤其是分布式系统中,接口调用失败 ...

  5. redis 判断存在性_Redis如何保证接口的幂等性?

    原标题:Redis如何保证接口的幂等性? 在最近的一次业务升级中,遇到这样一个问题,我们设计了新的账户体系,需要在用户将应用升级之后将原来账户的数据手动的同步过来,就是需要用户自己去触发同步按钮进行同 ...

  6. 如何保证接口的幂等性

    如何保证接口的幂等性 什么是幂等性 幂等性是系统服务对外一种承诺,承诺只要调用接口成功,外部多次调用对系统的影响是一致的.声明为幂等的服务会认为外部调用失败是常态,并且失败之后必然会有重试. 通俗地说 ...

  7. 如何保证微服务接口的幂等性

    在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订 ...

  8. 如何实现接口的幂等性?

    转载地址:如何实现接口的幂等性? 前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题.本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考 ...

  9. 分布式系统中接口的幂等性(转)

    业务场景 公司有个借贷的项目,具体业务类似于阿里的蚂蚁借呗,用户在平台上借款,然后规定一个到期时间,在该时间内用户需将借款还清并收取一定的手续费,如果规定时间逾期未还上,则会产生滞纳金. 用户发起借款 ...

最新文章

  1. 数学建模优化模型简单例题_数学建模之优化模型:存储模型
  2. ssh协议是osi_TCP/IP协议和三次握手四次挥手
  3. 使用python3 实现将网页或者文件导出至pdf 文件
  4. 为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?
  5. 20175213 2018-2019-2 《Java程序设计》第9周学习总结
  6. lamaba中reduce方法将集合中的所有整数相加,并返回其总和
  7. java注解 sql_mybatis中注解映射SQL示例代码
  8. vavr_使用Vavr在Java 8流中更好的异常处理
  9. pcl使用通道滤波器来滤波
  10. OJ1012: 求绝对值
  11. CVPR 2021 论文/代码分类汇总!持续更新中!
  12. 狂打气球html5游戏_4399h5游戏_企业团建活动小游戏:合力吹气球
  13. spss 的判别分析输出结果解读,P(Dd|G=g), P(G=g|D=d),个案输出结果 casewise statistics
  14. Math.floor cei round
  15. List求交集、补集
  16. 红绿灯(交通信号灯)检测数据集
  17. 计算机操作系统计算题及答案(5),5计算机操作系统练习题及答案.doc
  18. unity shader 边缘光,内发光,外发光,轮廓边缘光,轮廓内边缘光,轮廓外边缘光
  19. Vue-Uni-App小程序实现身份证识别
  20. RAID的基本工作模式

热门文章

  1. 单体多字系统以及多体并行系统
  2. VC++调试win32设置参数
  3. 栈的顺序存储及实现(一)
  4. git 码云 使用记录
  5. android.util.Base64 和 org.apache.commons.codec.binary.Base64
  6. [BZOJ3781]小B的询问
  7. Can you answer these queries II
  8. jQuery 遍历 - siblings()方法
  9. 安装Windows7出现:”安装程序无法创建新的系统分区 也无法定位系统分区“ 终极解决方案...
  10. C++中固定长度短字符串比较是否相同,忽略大小写比对时的小技巧