【第4章】IDEA+Maven之Java客户端操作zookeeper案例#增查节点

mac2024-05-18  37

笔记大纲

开发环境

实现要求

测试代码(详细实现步骤)


一、开发环境

  开发工具:idea2017

  项目管理工具:Maven

  Client端运行环境:JDK1.8

  Server端运行环境:CentOS7.0(防火墙检查是否关闭)

  项目类型:SpringBoot2.1.9

  日志类型:log4j

二、实现要求

Java作为Zookeeper的Client端,CentOS7.0为Zookeeper的Server端!

  (1)通过Java程序,新建连接Zookeeper,就像JDBC的Connection,openSession;

  (2)新建一个znode节点“/zkDemo191031”

  (3)获取当前节点"/zkDemo191031"的最新值"zkTestData666"

  (4)关闭连接

三、测试代码

(1)Lof4j日志
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="log.console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p (%C{1}:%M) - %m%n" /> </layout> <!-- <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="debug" /> <param name="levelMax" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter>--> </appender> <appender name="log.file" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="D:\\lindaxia4XML.log" /> <param name="Append" value="true" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p (%C{1}:%M) - %m%n" /> </layout> <!-- <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="info" /> <param name="levelMax" value="info" /> <param name="AcceptOnMatch" value="true" /> </filter> --> </appender> <!-- <logger name="com.atguigu" > <level value="info" /> <appender-ref ref="log.console" /> <appender-ref ref="log.file" /> </logger> <logger name="com.atguigu.dao" > <level value="debug" /> <appender-ref ref="log.console" /> <appender-ref ref="log.file" /> </logger>--> <!-- --> <root> <level value="info" /> <appender-ref ref="log.console" /> <appender-ref ref="log.file" /> </root> </log4j:configuration>
(2)pom,.xml文件添加依赖
<!-- 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>
(3)测试主代码
import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.io.IOException; /** * @author lindaxia * @date 2019/10/31 14:38 */ public class ZkDemo { public static final String CONNECTSTRING = "192.168.43.111:2181"; //CentOS7IP地址 public static final String PATH = "/zkDemo191031"; public static final int SESSION_TIMEOUT = 20 * 1000; //Session失效时间 /** * (1)通过Java程序,新建连接Zookeeper * * @return * @throws IOException */ public ZooKeeper startZK() throws IOException { return new ZooKeeper(CONNECTSTRING, SESSION_TIMEOUT, new Watcher() { //Watcher接口 @Override public void process(WatchedEvent watchedEvent) { } }); } /** * (2)创建节点 create -s path data //创建持久化序号节点 * * @param zk * @param path * @param data * @throws KeeperException * @throws InterruptedException */ public void createZookeeper(ZooKeeper zk, String path, String data) throws KeeperException, InterruptedException { //路径+数据+权限 zk.create(path, data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } /** * (3)获取节点 get path [watch] * * @param zk * @param path * @return * @throws KeeperException * @throws InterruptedException */ public String getZNode(ZooKeeper zk, String path) throws KeeperException, InterruptedException { String result = "";//不会报空指针 byte[] data = zk.getData(path, false, new Stat()); result = new String(data); return result; } /** * (4)关闭Zookeeper连接 * * @param zk */ public void stopZK(ZooKeeper zk) throws InterruptedException { if (zk != null) { zk.close(); } } /** * 主方法 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { ZkDemo zkDemo = new ZkDemo(); //获取连接 ZooKeeper zk = zkDemo.startZK(); if(zk.exists(PATH,false)==null){ //创建持久化节点 zkDemo.createZookeeper(zk,PATH,"zkTestData666"); //获取持久化节点,控制输出信息 String zNode = zkDemo.getZNode(zk, PATH); System.out.println("====测试获取zNode节点信息========"+zNode); }else{ System.out.println("zNode节点已经存在!!!"); } //关闭连接 zkDemo.stopZK(zk); } }
Client端测试

控制台输出,符合输出要求!

Server端校验

Zookeeper客户端新增节点成功!


 ☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!

☞本人博客:https://coding0110lin.blog.csdn.net/  欢迎转载,一起技术交流吧!

最新回复(0)