Java接口幂等性问题及解决方案

场景

用户多次点击按钮
用户页面回退再次提交
微服务相互调用,由于网络问题,导致请求失败,Feign触发重试机制

解决方案

token机制(令牌)

在修改界面,用户点击确定后台生成一个token返回给前端,后台同时在Redis中保存这个token数据,前端不展示这个token,当用户点击确定按钮,请求中会携带这个token,此时后台会先校验请求的token和redis中token是否一致,一致的话即第一次请求,执行业务代码并在Redis中删除该token,当用户多次提交,后台判断Redis中验证码不存在即多次提交,不再执行业务代码,保证业务的幂等性不再重复执行
**问题1:**先删除token还是后删除token
·先删除可能导致删除token以后,服务器闪断,业务确实没有执行,此时重试还带上之前token,由于防重设计导致,请求还是没有走到执行业务代码那块逻辑。
·后删除可能导致业务处理成功,但是服务闪断,出现超时,没有删除token,别人继续重试,导致业务被执行两遍
解决:我们最好设计为先删除token,如果业务调用失败,就重新获取token再次请求。
问题2:如何保证token 获取、比较和删除必须是原子性
redis.get(token) 、token.equals、 redis.del(token)如果这3个操作不是原子,可能导致,高并发下,都get到同样的数据&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rsun04551

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值