1、zkCli的常用命令操作
(1)Help
(2)ls 使用 ls 命令来查看当前znode中所包含的内容
(3)ls2查看当前节点数据并能看到更新次数等数据
(4)stat查看节点状态
(5)set
1)设置节点的具体值
2)set 节点 value值 set /test atguigu
(6)get
1)获得节点的值
2)get 节点
(7)create
1)普通创建 create /test demo001
2)-s含有序列
3)-e 临时
(8)delete 删除无子节点的目录
(9)rmr 递归删除
2 四字命令
2.1 是什么?
zookeeper支持某些特定的四字命令,他们大多是用来查询ZK服务的当前状态及相关信息的。
通过telnet或nc向zookeeper提交相应命令,如:echo ruok | nc 127.0.0.1 2181
运行公式:echo 四字命令 | nc 主机IP zookeeper端口
2.2 常用命令
ruok:测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应
stat:输出关于性能和连接的客户端的列表
conf:输出相关服务配置的详细信息
cons:列出所有连接到服务器的客户端的完全的连接 /会话的详细信息。包括“接受 / 发送”的包数量、会话id 、操作延迟、最后的操作执行等等信息
dump:列出未经处理的会话和临时节点
envi:输出关于服务环境的详细信息(区别于conf命令)
reqs:列出未经处理的请求
wchs:列出服务器watch的详细信息
wchc:通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
wchp:通过路径列出服务器 watch的详细信息。它输出一个与 session相关的路径
3、Java客户端操作
3.1 创建项目
创建一个maven 项目zk-demo
3.2 添加依赖
修改pom.xml
<dependencies>
<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
3.3 代码部分
public class ZkDemo {
private static final String CONNECTSTRING = "192.168.200.129:2181";
private static final String PATH = "/atguigu";
private static final int SESSION_TIMEOUT = 50*1000;
// 连接zk 方法
public ZooKeeper startZk() throws Exception{
//
return new ZooKeeper(CONNECTSTRING, SESSION_TIMEOUT, new Watcher() {
@Override
public void process(WatchedEvent event) {
}
});
}
// 关闭zk 方法
public void stopZk(ZooKeeper zooKeeper) throws Exception{
if (zooKeeper!=null){
zooKeeper.close();
}
}
/**
* 创建节点
* @param zk zk 对象
* @param path 节点名称
* @param nodeValue 节点数据
* @throws Exception
*/
public void createZNode(ZooKeeper zk,String path,String nodeValue) throws Exception{
// acl 表示权限 OPEN_ACL_UNSAFE 公开的权限
zk.create(path,nodeValue.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
// 获取节点
public String getZNode(ZooKeeper zk,String path)throws Exception{
byte[] byteArray = zk.getData(path, false, new Stat());
String data = new String(byteArray);
System.out.println(data);
return data;
}
// 调用
public static void main(String[] args) throws Exception {
ZkDemo zkDemo = new ZkDemo();
// 获取连接
ZooKeeper zk = zkDemo.startZk();
String zNode = null;
Stat stat = zk.exists(PATH, false);
if (stat==null){
// 创建节点
zkDemo.createZNode(zk,PATH,"java");
}else {
System.out.println("***********znode has already ok***********");
}
// 获取节点数据
zNode = zkDemo.getZNode(zk, PATH);
System.out.println("**********result:"+zNode);
// 关闭连接
zkDemo.stopZk(zk);
}
}