当前位置 博文首页 > RemainderTime:window上安装zookeeper和可视化界面zkui
在window上使用zookeeper实现简单的分布式锁,并配合使用可视化界面zkui
链接:https://pan.baidu.com/s/1PxdloBT1GJvHIFHh9mCtWQ
提取码:oq9l
如果去官网下载的小伙伴一定要注意了,现在的版本的已经把编译和未编译的版本分开成了两个项目。应该是从3.5.4后的版本开始。
所以大家下载的时候一定要下载尾缀有 -bin 的文件。
点击第一个链接,里面是编译好的项目。
选择任意一个项目后缀带 -bin 的连接进行下载就行了。
现在我把下载好的zookeeper解压并放在了D盘下,
dataDir=D:\zookeeper\data
dataLogDir=D:\zookeeper\log
dataDir为刚才自己新建的data路径
dataLogDir为新建的log路径
链接:https://pan.baidu.com/s/1F3PqyrZB46l0z_GWYDV10g
提取码:a2wv
方式一: 可使用命令行打包(前提是本地需要先配置maven)
mvn clean compile
mvn clean package
方式二:使用idea进行打包(本教程使用的)
java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar
这样就是运行成功了
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
public class ZookeeperLockTest {
public static void main(String[] args) {
CuratorFramework zkClient = getZkClient();
String lockPath = "/lock";
InterProcessMutex lock = new InterProcessMutex(zkClient, lockPath);
//模拟50个线程抢锁
for (int i = 0; i < 50; i++) {
new Thread(new TestThread(i, lock)).start();
}
}
static class TestThread implements Runnable {
private Integer threadFlag;
private InterProcessMutex lock;
public TestThread(Integer threadFlag, InterProcessMutex lock) {
this.threadFlag = threadFlag;
this.lock = lock;
}
public void run() {
try {
lock.acquire();
System.out.println("第"+threadFlag+"线程获取到了锁");
//等到1秒后释放锁
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
lock.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private static CuratorFramework getZkClient() {
String zkServerAddress = "localhost:2181";
ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3, 5000);
CuratorFramework zkClient = CuratorFrameworkFactory.builder()
.connectString(zkServerAddress)
.sessionTimeoutMs(5000)
.connectionTimeoutMs(5000)
.retryPolicy(retryPolicy)
.build();
zkClient.start();
return zkClient;
}
}