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
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里