分布式并发控制

背景

我们很多应用都是以集群方式存在,但有些操作无法并发进行,如某些定时扫描表的任务等,需要控制并发,否则容易造成重复处理。

方案

当前我们微服务基本都已接入consul,因此使用Consul的Key/Value的Acquire/Release机制来实现。

Spring Cloud

@Autowired

private ConsulClient consulClient;

CheckTtl checkTtl = new CheckTtl("ttlLock" + lockKey, consulClient);
Lock lock = new Lock(consulClient, lockKey, checkTtl);//Lock是自定义的
 
 
try {
    //是否阻塞,阻塞时轮询间隔,最大重试次数
 if (lock.lock(true, 500L, null)) {
        // 处理业务逻辑
 }
} finally {
        lock.unlock();
}

然后使用lock即可。

不同的lockKey表示不同的锁对象。像定时任务的简单互斥,直接lock.lock(false,null,null)判断返回为true时才处理定时任务就行了。



猜你喜欢

转载自blog.csdn.net/qq_33315102/article/details/80586328