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

笔记大纲
  • 开发环境

  • 实现要求

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


一、开发环境

  开发工具:idea2017

  项目管理工具:Maven

  Client端运行环境:JDK1.8

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

  项目类型:SpringBoot2.1.9

  日志类型:log4j

二、实现要求

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

  (1)通过Java程序,新建连接Zookeeper,就像JDBCConnection,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/  欢迎转载,一起技术交流吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值