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
作者:BigBender
出处:https://www.cnblogs.com/BigBender/p/14358661.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-02-02 正定二次型和正定矩阵
2020-02-02 惯性定理
2020-02-02 二次型
2020-02-02 实对称矩阵