Ubuntu下Zookeeper的安装和基本使用

Zookeeper的安装

最新稳定版本官方地址:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

Ctrl + Alt + T 进入命令行

https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

下载完成后进行解压

tar zxf apache-zookeeper-3.6.2-bin.tar.gz

进入zookeeper

cd apache-zookeeper-3.6.2-bin

按照规范应该改名为 zoo.crg

cp zoo_sample.cfg zoo.cfg

修改配置文件zoo_sample.cfg中的存储快照的目录,vim修改

vim zoo.cfg

在此之前我们可以在zookeeper目录下通过mkdir命令新建一个data文件夹,将该路径修改为新建文件夹的路径保存退出

:wq

Zookeeper客户端常用命令

进入到./zkCli.sh命令行工具后,可以使用下面常用命令

ls 

  • ls -s /path
  • ls -s,详细信息
  • ls -R,当前目录和子目录中内容都罗列出来

create

  • create /path[data],[data]包含内容,创建指定路径

get

  • get [-s] /path [-s] 详细信息,例如 get -s /demo

信息列表

  • null:存放的数据
  • cZxid:创建时zxid(znode每次改变时递增的事务id)
  • ctime:创建时间戳
  • mZxid:最近一次更新的zxid
  • mtime:最近一次更新的时间戳
  • pZxid:子节点的zxid
  • cversion:子节点更新次数
  • dataversion:节点数据更新次数
  • aclVersion:节点ACL(授权信息)的更新次数
  • ephemeralOwner:如果该节点是ephemeral节点,表示与该节点绑定的session id,如果不是值为0
  • dataLength:字节数据字节数
  • numChildern:子节点数量

set

  • set /path data 设置节点内容

delete

  • delete /path 删除节点

向Zookeeper中注册内容

新建项目zookeeper

创建/demo

使用zookeeper的客户端命令工具创建/demo

./zkCli.sh
create /demos

添加依赖,官方地址:https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper/3.5.5

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.5</version>
</dependency>

内容发布

public class SendContent{
    public static void main(String[] args){
        // 参数1: zookeeper ip + port
        // 参数2: 访问超时设置
        // 参数3: 通过观察者模式发出访问回复
        try{
            ZooKeeper zooKeeper = new ZooKeeper("192.168.93.10:2181", 100000, new Watcher(){
                public void process(WatchedEvent watchedEvent){
                    System.out.println("获取连接");
                }
            });
            // 向zookeeper服务器中, 发送内容
            // 参数1: 发送的文件
            // 参数2: 发送的内容
            // 参数3: 权限
            // 参数4: 内容的模式
            String content = zooKeeper.create("/demo/rmi-address", "rmi:localhost:8080/demoService".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
            System.out.println("content = " + content);            
        }catch(IOException e){
            e.printStackTrace();
        }catch(KeeperException e){
            e.printStackTrace();    
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

消息订阅

public class ReciveContent{
    public static void main(String[] args){
        try{
            // 创建zookeeper对象
            ZooKeeper zooKeeper = new ZooKeeper("192.168.93.10:2181", 100000, new Watcher(){
                public void process(WatchedEvent watchedEvent){
                    System.out.println("获取连接");
                }
            });
            // 从Zookeeper中获取内容
            List<String> list = zooKeeper.getChildren("/demo", false);
            for(String child:list){
                byte[] result = zooKeeper.getData("/demo/" + child, false, null);
                System.out.println(new String(result));
            }
        }catch(IOException e){
            e.printStackTrace();
        }catch(KeeperException e){
            e.printStackTrace();    
        }catch(InterruptedException e){
            e.printStackTrace();
        }    
    }
}

利用zookeeper可以手写RPC框架

使用Zookeeper作为注册中心,RMI作为连接技术,手写RPC框架,包含3个聚合子项目

pojo,service,serviceimpl:provider,consumer

配置module,手写.iml文件

建立Module,provider依赖于service,service依赖于pojo,consumer依赖于service

论读书
睁开眼,书在面前
闭上眼,书在心里
原文地址:https://www.cnblogs.com/YC-L/p/14358661.html