接口幂等性设计

简介: 接口幂等性设计

什么叫接口幂等性

系统中一个接口运行多次和运行一次的效果是一样的, 防止重复操作

比如, 多次点击提交订单按钮, 后台只生成一条订单; 支付时, 由于网络问题重发,应该只扣一次钱

删除业务的幂等性

先查询, 有再删除

public int delUser(Integer userId) {
        User user = userMapper.selectByPrimaryKey(userId);
        if (user!=null){
            log.info("用户存在,用户为:"+userId);
            return userMapper.deleteByPrimaryKey(userId);
        }
        log.info("用户不存在存在,用户为:"+userId);
        return 0;
    }

更新业务的幂等性

加一个版本号version字段, 每次修改都+1, 并且每次修改都需要带上version字段作为条件

插入业务的幂等性

使用分布式锁

依赖

<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>

定义ZkConfig

@Configuration
public class ZkConfig {
    @Bean(initMethod="start",destroyMethod = "close")
    public CuratorFramework getCuratorFramework() {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);
        return client;
    }
}

插入保证幂等性

@Service
@Slf4j
public class UserService {
    @Resource
    private UserMapper userMapper;
    @Autowired
    private CuratorFramework zkClient;
    public int insertUser(User user, String token) throws Exception {
        InterProcessMutex lock = new InterProcessMutex(zkClient, "/"+token);
        boolean isLock = lock.acquire(30, TimeUnit.SECONDS);
        if (isLock){
            return userMapper.insertSelective(user);
        }
        return 0;
    }
}

这种使用分布式锁结合token保证幂等性, 适用于所有场景

目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
接口防刷 && 接口幂等性问题
接口防刷 && 接口幂等性问题
22 0
|
7月前
|
前端开发 NoSQL JavaScript
常见接口和服务幂等性问题及解决方案
常见接口和服务幂等性问题及解决方案
158 0
|
18天前
|
存储 缓存 安全
接口的幂等性
接口的幂等性
21 0
|
SQL 缓存 NoSQL
接口的幂等性设计和防重保证,详细分析幂等性的几种实现方法
本篇文章详细说明了幂等性,解释了什么是幂等性,幂等性的使用场景,讨论了幂等和防重的概念。分析了幂等性的情况以及如何设计幂等性服务。阐述了幂等性实现防重的几种策略,包括乐关锁,防重表,分布式锁,token令牌以及支付缓冲区。
4946 0
接口的幂等性设计和防重保证,详细分析幂等性的几种实现方法
|
17天前
|
存储 缓存 数据库
接口幂等有哪些实现方式
接口幂等有哪些实现方式
14 0
|
17天前
|
API
什么是接口幂等
什么是接口幂等
6 0
|
8月前
|
SQL NoSQL Java
【项目场景】如何保证接口的幂等性?
【项目场景】如何保证接口的幂等性?
326 0
|
8月前
|
消息中间件 SQL 缓存
接口幂等性
接口幂等性 一、定义
|
8月前
|
消息中间件 存储 NoSQL
浅谈接口幂等性
幂等性,是开发人员在日常开发中必须要考虑的,尤其是转账、支付等涉及金额交易的场景,如果出现幂等性的问题,造成的后果是非常严重的。 本文将分享一下什么是幂等性以及如何保证幂等性。
213 0
|
9月前
|
消息中间件 SpringCloudAlibaba NoSQL
接口幂等性解决方案
**幂等性**原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
548 0
接口幂等性解决方案