• Zookeeper学习笔记(2)—— Zookeeper API简单操作


    前置知识:Zookeeper学习笔记(1)—— 基础知识-CSDN博客

    Zookeeper集群搭建部分

    前提:保证zookeeper集群处于启动状态

    环境搭建

    依赖配置

    1. <dependencies>
    2. <dependency>
    3. <groupId>junitgroupId>
    4. <artifactId>junitartifactId>
    5. <version>RELEASEversion>
    6. dependency>
    7. <dependency>
    8. <groupId>org.apache.logging.log4jgroupId>
    9. <artifactId>log4j-coreartifactId>
    10. <version>2.8.2version>
    11. dependency>
    12. <dependency>
    13. <groupId>org.apache.zookeepergroupId>
    14. <artifactId>zookeeperartifactId>
    15. <version>3.5.7version>
    16. dependency>
    17. dependencies>

    log4j.properties

    1. log4j.rootLogger=INFO, stdout
    2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    4. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    5. log4j.appender.logfile=org.apache.log4j.FileAppender
    6. log4j.appender.logfile.File=target/spring.log
    7. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    8. log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

    参数具体含义:

    log4j.rootLogger=INFO, stdout:设置根记录器的级别为INFO,并指定将日志输出到控制台(stdout)

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender:创建一个名为stdout的日志输出器,使用org.apache.log4j包中的ConsoleAppender类

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout:为stdout输出器设置布局,使用org.apache.log4j包中的PatternLayout类。

    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n:定义了日志消息的格式,其中:

    • %d:表示日期和时间;
    • %p:表示日志级别;
    • [%c]:表示日志来源的类名;
    • %m:表示实际的日志消息;
    • %n:表示换行符。

    log4j.appender.logfile=org.apache.log4j.FileAppender:创建一个名为logfile的日志输出器,使用org.apache.log4j包中的FileAppender类。

    log4j.appender.logfile.File=target/spring.log:指定logfile输出器将日志写入到名为"target/spring.log"的文件中。

    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout:为logfile输出器设置布局,使用org.apache.log4j包中的PatternLayout类。

    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n:定义了日志消息的格式,与stdout输出器相同。

    打包插件配置

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.pluginsgroupId>
    5. <artifactId>maven-shade-pluginartifactId>
    6. <version>3.2.4version>
    7. <executions>
    8. <execution>
    9. <phase>packagephase>
    10. <goals>
    11. <goal>shadegoal>
    12. goals>
    13. execution>
    14. executions>
    15. plugin>
    16. plugins>
    17. build>

    客户端操作

    整体使用junit进行测试

    1. package com.why.zk;
    2. import org.apache.zookeeper.*;
    3. import org.apache.zookeeper.data.Stat;
    4. import org.junit.Before;
    5. import org.junit.Test;
    6. import java.io.IOException;
    7. import java.util.List;
    8. public class zkClient {
    9. private static String connetString = "hadoop102:2181,hadoop103:2181,hadoop104:2181"; //客户端连接ip
    10. private static int sessionTimeout = 2000; //超时时间
    11. private ZooKeeper zkClient = null; //客户端对象
    12. @Before
    13. public void init() throws IOException {
    14. zkClient = new ZooKeeper(connetString, sessionTimeout, new Watcher() {
    15. @Override
    16. public void process(WatchedEvent watchedEvent) {
    17. //收到事件通知后的回调函数
    18. System.out.println("事件类型:" + watchedEvent.getType());
    19. System.out.println("事件路径:" + watchedEvent.getPath());
    20. //再次启动对子节点的监听
    21. // try {
    22. // List children = zkClient.getChildren("/", true);
    23. // for(String child : children)
    24. // {
    25. // System.out.println(child);
    26. // }
    27. // } catch (InterruptedException | KeeperException e) {
    28. // e.printStackTrace();
    29. // }
    30. }
    31. });
    32. }
    33. //创建节点
    34. @Test
    35. public void create(){
    36. try {
    37. String nodeCreated = zkClient.create("/bigdata/test5","test5".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
    38. System.out.println(nodeCreated);
    39. } catch (InterruptedException | KeeperException e) {
    40. e.printStackTrace();
    41. }
    42. }
    43. //获取子节点并监听节点变化
    44. @Test
    45. public void getChildren() throws InterruptedException, KeeperException {
    46. List children = zkClient.getChildren("/", true);
    47. for(String child : children)
    48. {
    49. System.out.println(child);
    50. }
    51. // 延时阻塞(此时在shell中创建子节点,可以在控制台监听到子节点的变化
    52. Thread.sleep(Long.MAX_VALUE);
    53. }
    54. //判断节点是否存在
    55. @Test
    56. public void exist() throws InterruptedException, KeeperException {
    57. Stat stat = zkClient.exists("/bigdata", false);
    58. System.out.println(stat == null ? "not exist" : "exist");
    59. }
    60. }
  • 相关阅读:
    JavaScript遭嫌弃,“反JS”主义者兴起
    红黑树树插入后自平衡
    【题解】洛谷 P9658 Laser Trap
    使用Spring Boot实现GraphQL
    Wireshark基本使用方法
    ES集群手动搭建步骤V1.0(基于elasticsearch-7.3.0版本)
    Zookeeper系统模型_客户端命令行
    第十一节:抽象类和接口【java】
    LuatOS-SOC接口文档(air780E)-- fota - 底层固件升级
    设计模式 14 模板模式
  • 原文地址:https://blog.csdn.net/qq_51235856/article/details/134491745