Spring Boot 知识笔记(集成zookeeper)
一、本机搭建zookeeper伪集群
1、下载安装包,复制三份
2、每个安装包目录下面新建一个data文件夹,用于存放数据目录
3、安装包的conf目录下,修改zoo.cfg配置文件
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=5 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=2 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. #这里要修改成刚才创建的目录 dataDir=D:/tools/zookeeper/zookeeper-3.4.6_1/data # the port at which the clients will connect #每个安装包的启动端口要不一样 clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 #server后面的两个端口也必须不同 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:4888:5888 server.3=127.0.0.1:6888:7888
4、上面创建的data目录,新建myid文件,分别写入1,2,3,与配置文件中的server点后面的数字一致
5、进入bin目录,分别启动三个zk
6、在节点1,创建一个znode,并设置初始内容,如下
7、登录其他节点,查看这个znode的内容,如下,可以看到,不同节点的zk已经同步了znode的内容,这就是zk的核心特性,基于这个特性,可以对分布式应用程序实现服务不同、统一配置管理、统一服务命名,服务注册等功能。
二、使用java集成zk,实现znode的增删改查
package net.Eleven.demo.OtherTest; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.util.List; import java.util.concurrent.CountDownLatch; public class ZookeeperClient implements Watcher { private ZooKeeper zookeeper; private static final int SESSION_TIME_OUT=2000; //超时时间 private CountDownLatch countDownLatch = new CountDownLatch(1); @Override public void process(WatchedEvent watchedEvent) { if (watchedEvent.getState()== Event.KeeperState.SyncConnected){ System.out.println("Watch received event"); countDownLatch.countDown(); } } /** * 连接zk * @param host * @throws Exception */ public void connectZookeeper(String host) throws Exception{ zookeeper = new ZooKeeper(host,SESSION_TIME_OUT,this); countDownLatch.await(); System.out.println("zookeeper.java connection success"); } //创建节点 public String createNode(String path,String data) throws Exception{ return this.zookeeper.create(path,data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } //获取所有节点 public List<String> getChildren(String path) throws KeeperException,InterruptedException{ List<String> children = zookeeper.getChildren(path,false); return children; } //获取节点上的数据 public String getData(String path) throws KeeperException,InterruptedException{ byte[] data = zookeeper.getData(path,false,null); if (data==null){ return ""; } return new String(data); } //设置节点信息 public Stat setData(String path,String data) throws KeeperException, InterruptedException{ Stat stat = zookeeper.setData(path, data.getBytes(), -1); return stat; } //删除节点 public void deleteNode(String path) throws InterruptedException, KeeperException{ zookeeper.delete(path, -1); } //关闭连接 public void closeConnection() throws InterruptedException { if (zookeeper != null) { zookeeper.close(); } } public boolean isConnected(){ return zookeeper.getState() == ZooKeeper.States.CONNECTED; } public static void main(String[] args) throws Exception { ZookeeperClient zookeeper = new ZookeeperClient(); zookeeper.connectZookeeper("127.0.0.1:2181"); List<String> children = zookeeper.getChildren("/"); System.out.println(children); zookeeper.createNode("/Eleven4","create node by java"); System.out.println(zookeeper.getData("/Eleven4")); } }