首页 » Web前端 » zookeeperphpclient技巧_Zookeeper ZkClient

zookeeperphpclient技巧_Zookeeper ZkClient

访客 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.cdd</groupId> <artifactId>zkclient-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>zkclient-demo</name> <description>zkclient-demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/com.101tec/zkclient --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> <!-- 打消冲突 --> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>代码块1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

加入了 ZkClient的依赖,我们就可以编写程序利用 zkclient 的 API 来向 Zookeeper 做事端发送要求了。

2.2 编写 ZkClientServer 类

我们在 Spring Boot 主函数的同级新建目录 service ,在 service 目录中新建类 ZkClientServer :

zookeeperphpclient技巧_Zookeeper ZkClient

package cn.cdd.zkclientdemo.service;import org.I0Itec.zkclient.ZkClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;// 声明 ZkClientServer 类为 Bean,交给 Spring 管理@Componentpublic class ZkClientServer {// Zookeeper 集群的地址 @Value(value = "${zookeeper.address}") private String address;// 获取 ZkClient public ZkClient getZkClient() { return new ZkClient(address); }}

在 application.properties 配置文件中配置 Zookeeper 集群的地址:

zookeeperphpclient技巧_Zookeeper ZkClient
(图片来自网络侵删)

zookeeper.address=192.168.0.77:2181,192.168.0.88:2181,192.168.0.99:2181

配置完成后,我们就可以去测试类中进行测试了。

2.3 测试

我们在项目中与 main 目录同级的 test 目录中找到测试类 ZkClientDemoApplicationTests ,在个中添加测试方法。

2.3.1 查询测试

package cn.cdd.zkclientdemo;import cn.cdd.zkclientdemo.service.ZkClientServer;import org.I0Itec.zkclient.ZkClient;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTestclass ZkClientDemoApplicationTests {// 依赖注入 @Autowired private ZkClientServer zkClientServer; @Test void contextLoads() { // 获取 ZkClient 工具 ZkClient zkClient = zkClientServer.getZkClient(); // 获取子节点凑集 List<String> children = zkClient.getChildren("/"); System.out.println(children); // 开释资源 zkClient.close(); }}

实行测试方法,掌握台输出:

[zookeeper, imooc]

我们可以看到掌握台输出了在上一节中我们增加的节点 imooc,解释我们的查询成功实行了。
接下来我们测试其它的 API。

2.3.2 创建持久节点

创建持久节点测试:

@Testvoid contextLoads() { ZkClient zkClient = zkClientServer.getZkClient(); // 在 imooc 节点下创建持久节点 wiki zkClient.createPersistent("/imooc/wiki"); // 获取 imooc 节点的子节点凑集 List<String> children = zkClient.getChildren("/imooc"); System.out.println(children); // 开释资源 zkClient.close();}

实行测试方法,掌握台输出:

[wiki]2.3.3 删除节点

删除节点测试:

@Testvoid contextLoads() { ZkClient zkClient = zkClientServer.getZkClient(); // 删除 imooc 的 子节点 wiki boolean delete = zkClient.delete("/imooc/wiki"); System.out.println(delete); // 开释资源 zkClient.close();}

实行测试方法,掌握台输出:

true

true 表示删除 wiki 节点成功。

2.3.4 读写数据

节点数据读写测试:

@Testvoid contextLoads() { ZkClient zkClient = zkClientServer.getZkClient(); // 给 imooc 节点写入数据 wiki zkClient.writeData("/imooc","wiki"); // 读取 imooc 节点的数据 Object data = zkClient.readData("/imooc"); System.out.println(data); // 开释资源 zkClient.close();}

实行测试方法,掌握台输出:

wiki

Tips: 当我们利用 API 操作节点时,节点参数必须是全路径。

测试完成后,我们来对 ZkClient 常用的 API 做一下先容。

3. ZkClient APIZkClient 初始化 API

// serverstring:做事器地址的字符串// 如:192.168.0.77:2181,192.168.0.88:2181,192.168.0.99:2181public ZkClient(String serverstring);// zkServers:做事器地址的字符串,connectionTimeout:连接超时时间,单位:mspublic ZkClient(String zkServers, int connectionTimeout);// sessionTimeout: session 超时时间public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout);// ZkSerializer:序列化办法,实现类有:SerializableSerializer、BytesPushThroughSerializerpublic ZkClient(String zkServers, int sessionTimeout, int connectionTimeout, ZkSerializer zkSerializer);节点创建 API

// path:节点全路径public void createPersistent(String path);// createParents:是否创建父节点public void createPersistent(String path, boolean createParents);// acl:权限列表public void createPersistent(String path, boolean createParents, List<ACL> acl);// data:节点数据public void createPersistent(String path, Object data);public void createPersistent(String path, Object data, List<ACL> acl);// 创建持久顺序节点public String createPersistentSequential(String path, Object data);public String createPersistentSequential(String path, Object data, List<ACL> acl);// 创建临时节点public void createEphemeral(String path);public void createEphemeral(String path, List<ACL> acl);// mode:节点类型public String create(String path, Object data, CreateMode mode);public String create(final String path, Object data, final List<ACL> acl, final CreateMode mode);public void createEphemeral(String path, Object data);public void createEphemeral(String path, Object data, List<ACL> acl);// 创建临时顺序节点public String createEphemeralSequential(String path, Object data);public String createEphemeralSequential(String path, Object data, List<ACL> acl);查询节点 API

// 获取子节点列表public List<String> getChildren(String path);// watch:是否开启不雅观察protected List<String> getChildren(final String path, final boolean watch);// 获取子节点数量public int countChildren(String path);// 节点是否存在protected boolean exists(final String path, final boolean watch);public boolean exists(String path);删除节点 API

public boolean delete(String path);// version:节点版本public boolean delete(final String path, final int version);读写节点数据 API

public <T> T readData(String path);public <T> T readData(String path, boolean returnNullIfPathNotExists);public <T> T readData(String path, Stat stat);protected <T> T readData(final String path, final Stat stat, final boolean watch);public void writeData(String path, Object object);public void writeData(String path, Object datat, int expectedVersion);不雅观察节点 API

// 不雅观察节点的数据变革public void watchForData(final String path);// 不雅观察子节点的变革public List<String> watchForChilds(final String path)4. 总结

本节我们学习了如何利用 ZkClient 的 API 对 Zookeeper 做事节点的操作,还先容了一些常用的 API。
以下是本节内容的总结:

利用 Spring Boot 集成 ZkClient 。
ZkClient 的 API。

相关文章