笔记大纲
-
开发环境
-
实现要求
-
测试代码(详细实现步骤)
一、开发环境
开发工具: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/ 欢迎转载,一起技术交流吧!