1 安装
下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
样例下载版本:3.4.13,样例操作系统:windows,JDK:1.8
将下载压缩包解压到某个路径下,并创建data和log两个目录
2 配置
ZooKeeper的三种模式:单机模式、集群模式和伪集群模式。
以单机模式举例:
1、拷贝zookeeper-3.4.13\conf下的zoo_sample.cfg文件到当前路径(conf),命名为zoo.cfg
2、修改zoo.cfg的data和log配置,端口默认2181,如果冲突,可修改。
配置说明:
tickTime:心跳时间
initLimit:多少个tickTime内,允许其他server连接并初始化数据
syncLimit:多少个tickTime内,允许follower节点同步
dataDir:存放内存数据文件目录,根据实际环境修改
dataLogDir:存放日志文件目录,根据实际环境修改
clientPort:监听端口,使用默认2181端口
server.x:配置集群主机信息,[hostname]:[通信端口]:[选举端口],x是data下myid文件的内容,集群环境唯一
maxClientCnxns:最大并发客户端数,用于防止DOS的,设置为0是不加限制
minSessionTimeout:最小的客户端session超时时间(单位是毫秒)
maxSessionTimeout:最大的客户端session超时时间(单位是毫秒)
3、运行:执行bin下面的zkServer.cmd
通过执行过程,发现zookeeper读取了我们刚刚创建的zoo.cfg文件。
确认端口2181已经开放,启动正常。
3 Java连接访问
添加maven依赖:
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
样例代码:
package com.chaozai.dubbo.test;
import java.io.IOException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
/**
* 测试单机Zookeeper环境连接
* @author chaozai
* @date 2019年3月5日
*
*/
public class TestZookeeper {
public static void main(String[] args) {
try {
ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 10000, new TestWatcher());
String node = "/test";
Stat stat = zk.exists(node, false);
//如果节点不存在,则创建节点
if(null==stat){
String createResult = zk.create(node, "test".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//获取创建结果
System.out.println(createResult);
}
//将会把“test”字符返回
byte[] b = zk.getData(node, false, stat);
System.out.println(new String(b));
zk.close();
} catch (IOException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 测试Watcher
* @author chaozai
* @date 2019年3月5日
*
*/
class TestWatcher implements Watcher{
public void process(WatchedEvent arg0) {
System.out.println("-----------------------");
System.out.println("WatchedEvent:"+arg0);
System.out.println("-----------------------");
}
}
运行结果:
-----------------------
WatchedEvent:WatchedEvent state:SyncConnected type:None path:null
-----------------------
/test
test
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!