基于zookeeper实现分布式锁

      分布式锁本来就是cp的场景,由于像redis分布式锁在主从架构中异步同步的问题,虽然有红锁的解决方案,但是稍显复杂,可是通过zookeeper来实现的分布式锁,就不会有这个问题。

      引入maven依赖

<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.13.0</version>
        </dependency>

    添加CuratorConfig的配置文件

@Configuration
public class CuratorConfig {

    @Value("${spring.curator.retryCount}")
    private int retryCount;
    @Value("${spring.curator.elapsedTimeMs}")
    private int elapsedTimeMs;
    @Value("${spring.curator.connectString}")
    private String connectString;
    @Value("${spring.curator.sessionTimeoutMs}")
    private int sessionTimeoutMs;
    @Value("${spring.curator.connectionTimeoutMs}")
    private int connectionTimeoutMs;

    @Bean
    public CuratorFramework curatorFramework(){
        ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(elapsedTimeMs, retryCount);
        CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, sessionTimeoutMs, connectionTimeoutMs, retryPolicy);
        client.start();
        return client;
    }

}

     加锁逻辑

@RestController
public class TestZKLockController {

    @Autowired
    private CuratorFramework curatorFramework;

    @GetMapping("getLock")
    public void lock() throws Exception {
        InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/test/lock");
        try {
            lock.acquire();
            System.out.println("执行业务逻辑");
            TimeUnit.SECONDS.sleep(30);
        }finally {
            lock.release();
        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值