Skip to content

Zookeeper

zookeeper在分布式系统中为集群提供注册中心来管理集群。

主要采用的是 文件系统+监听通知机制 实现实现分布式锁 分布式事务 分布式任务等。

客户端监听zookeeper中节点的状态,如果节点数据发生给变,zookeeper会通过监听机制通知客户端。

使用注意事项和总结

Zookeeper安装

docker 启动 Zookeeper

shell
docker exec -it zookeeper bash
cd bin/
./zkServer.sh status
docker exec -it zookeeper bash
cd bin/
./zkServer.sh status

Zookeeper锁

java
/*
* ZkConfig
*/
@Configuration
public class ZkConfig {
    @Bean
    public CuratorFramework cf() {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,2);
        CuratorFramework cf = CuratorFrameworkFactory.builder()
            .connectString("192.168.136.129:2181,192.168.136.129:2182,192.168.136.129:2183")
            .retryPolicy(retryPolicy)
            .build();
        cf.start();
        return cf;
    }
}
/*
* ZkConfig
*/
@Configuration
public class ZkConfig {
    @Bean
    public CuratorFramework cf() {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,2);
        CuratorFramework cf = CuratorFrameworkFactory.builder()
            .connectString("192.168.136.129:2181,192.168.136.129:2182,192.168.136.129:2183")
            .retryPolicy(retryPolicy)
            .build();
        cf.start();
        return cf;
    }
}
java
// 创建锁对象
InterProcessMutex mutex = new InterProcessMutex(cf, "/lock");
try {
    mutex.acquire();//获取锁
    //具体业务代码...
    mutex.release();//释放锁
} catch (Exception e) {
    e.printStackTrace();
}
// 创建锁对象
InterProcessMutex mutex = new InterProcessMutex(cf, "/lock");
try {
    mutex.acquire();//获取锁
    //具体业务代码...
    mutex.release();//释放锁
} catch (Exception e) {
    e.printStackTrace();
}