zookeeper 必须使用jdk1.8及以上版本.
下载地址:http://zookeeper.apache.org
1. ls命令查看节点
1. 创建节点 create
创建不带序号的节点
创建带序号的节点, 单引号中是节点的内容
创建临时节点, 客户端关闭15秒后 , 节点消失, 关闭服务也可以使临时节点消失;
2. 查看节点
查看节点内容get
查看节点的状态stat
修改节点数据set
删除节点 delete
deleteall /hello, 删除hello节点和其子节点
日志可视化:
在zookeeper的log文件夹下, 拷贝两个jar包, 后面可以通过java去看日志了;
打开一个cmd窗口,将目录指定到日志目录, 然后输入命令
java -classpath “.;*” org.apache.zookeeper.server.LogFormatter 日志文件名
Apache Curator: 是Apache ZooKeeper的java客户端库;
导入jar包依赖
<dependencies>
<dependency>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
<version>3.4.7version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>4.0.1version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-recipesartifactId>
<version>4.0.1version>
dependency>
dependencies>
java作为zookeeper的客户端实现zookeeper客户端的增删改查功能,
在IDEA下创建一个测试类,增删改查代码如下:
前提: zookeeper服务器需要提前开启
public class ZooKeeperTest {
private CuratorFramework client=null;
@Before
public void before(){
//创建连接失败重试策略对象
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 3);
//创建客户端对象
client = CuratorFrameworkFactory.newClient
("127.0.0.1:2181", 1000, 1000, retryPolicy);
}
//创建节点
@Test
public void createNode() throws Exception {
//开启客户端
client.start();
//创建节点
//client.create().forPath("/app01");
//client.create().forPath("/app02","app2_node".getBytes());
//client.create().creatingParentsIfNeeded().forPath("/app03/a","a_node".getBytes());
//创建带序号的临时节点
client.create().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath("/app04","app04".getBytes());
//5秒后释放临时节点
Thread.sleep(5000);
//关闭客户端
client.close();
}
@Test
public void update() throws Exception {
client.start();
//修改节点内容
client.setData().forPath("/app02","app02gengxin".getBytes());
client.close();
}
@Test
public void delet() throws Exception {
client.start();
//删除单个节点
client.delete().forPath("/app01");
//删除app03和其子节点
client.delete().deletingChildrenIfNeeded().forPath("/app03");
//只要客户端未关闭,就会一直去找服务器去删除app02节点
client.delete().guaranteed().forPath("/app02");
client.close();
}
@Test
public void findNode() throws Exception {
client.start();
byte[] bytes = client.getData().forPath("/app02");
System.out.println("app02节点的节点数据是:==="+new String(bytes));
client.close();
}
}