zoukankan      html  css  js  c++  java
  • 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

    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    linux中实现将多个连续的字符拆分为单个字符
    linux 中删除当前目录下指定文件外所有的文件
    linux中将指定行数据合并为一行数据
    gz文件压缩、解压缩保留源文件
    R语言中提取多个连续值的累计的中间位点
    .net的委托和事件的直接理解
    消息是什么
    显示进度条的无组件上传!!
    与Java相关的四十个名字
    循环为Label赋值!
  • 原文地址:https://www.cnblogs.com/YC-L/p/14358661.html
Copyright © 2011-2022 走看看