网页右边,向下滑有目录索引,可以根据标题跳转到你想看的内容 |
---|
如果右边没有就找找左边 |
- 分布式管理软件,常用它作为注册中心(依赖zookeeper的发布/订阅功能)、配置文件中心、分布式锁配置、集群管理等。
- zookeeper一共就有两个版本。主要使用的是java语言编写
一、安装下载运行Zookeeper
学习Zookeeper之前,需要你拥有一个Linux虚拟机,或Linux云服务器,并安装java的JDK环境 |
---|
https://blog.csdn.net/grd_java/article/details/115693312
- 上面这篇博客从无到有,搭建了大数据的开发环境,
你只需要参考这篇文章里面的安装虚拟机,安装系统,安装JDK,远程工具的使用即可
,无需克隆虚拟机,也无需搭建集群
- 百度Zookeeper官网,进入后点击下载
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8d8018b4aeaf0f1c6f087feb21396623.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f5deb4a3aad603697e61ab19054b7a52.png)
- 选择版本下载
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/417d61b594eec6d3655f0a856cf76fd3.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3972e2d2c8642bac5c3a28d18e64faea.png)
- 将其传输到虚拟机安装
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/570283847349fc4a4526192420cb1dae.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/61c1320c6f8f6dae06271a15bf84f990.png)
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /opt/module/
创建数据目录(Zookeeper硬性要求,需要有这样一个目录) |
---|
- 进入我们刚解压后的zookeeper文件夹
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/813a12e7ca88de11e17e3a37ba622761.png)
- 我们需要名为zoo.cfg的配置文件,但是zookeeper提供的是名字为zoo_sample.cfg的,所以我们需要复制一份改名
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d69b181f45d39e25b324ad7915c5236c.png)
cp zoo_sample.cfg zoo.cfg
- 修改配置文件
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ae44ab12e29bb9e0e03e83cf5bcd3216.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c4cc293b16ce02556c00f6e062abc449.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5ed23e985254534bceb4de8bcbfdb8f2.png)
- 进入bin目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8dbc883ed84ce8bd939f4377dcb09b80.png)
- 运行
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/17af65b4750898a20ffbf75d02087d5e.png)
./zkServer.sh start
- 查看运行状态
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a88cd40a8ff7ce7624c2724da72aa66c.png)
./zkServer.sh status
二、Zookeeper客户端操作命令
- 运行命令,进入客户端模式
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/68dca0f18db35ee7e6de4365a6ed266e.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/840238205589237bc32fb1ec62c02ca6.png)
./zkCli.sh
- 常用命令
-
ls
ls [参数] /path
:显示指定路径信息,可指定参数
参数-s:
罗列出详细信息参数-R:
当前目录和子目录中内容都罗列出来
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/21e2a6447e4a3cc7de44bf13bed7c4ad.png)
-
create
create /path [data]
:创建,[data]表示包含内容,
举例:create /demo:
创建/demo目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0bd4327f43e799da84f0f564bf3e7caa.png)
-
get
get [-s] /path
:查看指定路径下内容参数-s:
列出详细参数
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/455270e02ed24e9e1cea4fb43e459e22.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/28e8328f8814b936e75285c1734d76f0.png)
-
set
set /path data
:想指定路径下设置内容,就是放数据到指定目录,想象目录是数据库表,内容是数据
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6f7bbc30ef5a71515b0222943a88db4a.png)
-
delete
delete /path
:删除节点
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/85973353c0092691d9999d6f48b58192.png)
三、java代码内容发布到zookeeper服务器
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/21ac7ccdf6783fa32ab2d2443b978241.png)
- 创建maven项目引入依赖,创建发送内容类
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b502205a9fe827aba660bd6b0d03f7f7.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3d836c284b28bd1c467a3ea01fd70035.png)
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.9</version>
</dependency>
- 编写代码,查看运行效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b03d654ca2a1ea9ac81321f6159a23ac.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ef3eb6bab552330e99066d7cffed66d4.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b1974909ef3572dbef5a1aaea9378bcd.png)
import org.apache.zookeeper.*;
import java.io.IOException;
public class SendContext {
public static void main(String[] args) {
try {
ZooKeeper zooKeeper = new ZooKeeper("192.168.10.105:2181", 100000, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println("获取连接");
}
});
String s = zooKeeper.create("/demo/rmi-address", "lakdsjflkasjfklads".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
}
}
四、java代码消息订阅,获取服务器内容
- 创建类编写代码,查看运行效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a6a84251abebf2c4f4511ac52d856eae.png)
import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.List;
public class ReciveContext {
public static void main(String[] args) {
try {
ZooKeeper zooKeeper = new ZooKeeper("192.168.10.105:2181", 100000, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println("获取连接");
}
});
List<String> children = zooKeeper.getChildren("/demo", false);
System.out.println("/demo路径下有:"+children);
for (String child:children){
byte[] data = zooKeeper.getData("/demo/" + child, false, null);
System.out.println(child+"节点内容为:"+new String(data));
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
}
}