前沿:
上篇文章我们聊到了在解决分布式项目中线程安全问题,提到解决方案还有其他的,那么在此提出 基于 zookeeper 解决分布式项目中的线程安全问题 也是目前市面上比较流行的。做为一个高级开发工程师也是必须要学习的。
ZooKeeper是什么东西?
是协调多个分布式进程之间活动的。 主要应用在分布式系统中 保证跨jvm虚拟机之间的线程安全。
ZooKeeper特征的初步了解?
在使用的时候,我们应该了解一下它。其实ZooKeeper的原始功能很简单,基纡它的层次型的目录树的数据结构,并通过对树上的节点进行有效管理,可以设计出各种各样的分布式集群管理功能。此外, ZooKeeper本身 也是分布式集群的。
下图所示,给出了一个典型的Zookeeper层级命名空间,整个命名方式类似于文件系统,同一个目录下不能有相同名称的目录节点---特点:有层次结构构,类似于包,同一目录里面不能出现两个相同的包
分析其特征:
基于上面的图片,每一个节点是不能够重复的,如果谁创建了节点,那么谁就获取到了锁
关于节点的分类及生命周期:
临时节点 :
创建了节点对象后,用完了,就会自动删除,临时节点下不能创建子节点
持久节点:
节点创建,就一直在。除非有操作主动删除
临时有序节点:
在临时几点的基础上增加了顺序,可以用来实现分布式锁
持久有序节点:
就是在创建持久节点的时候,会自动的在持久节点名字后加数字后缀
那么现在我们怎么来 使用ZooKeeper 呢?
安装:
- 官方下载地址:Index of /apache/zookeeper , 下载后获得,解压即可安装。
- 安装配置: 把conf目录下的zoo_sample.cfg改名成zoo.cfg,这里我是先备份了zoo_sample.cfg再改的名。修改zoo.cfg的值如下:
dataDir=D:/zookeeper-3.4.9/data/data
dataLogDir=D:/zookeeper-3.4.9/data/log
启动:
点击bin目录下的zkServer.cmd 这时候出现下面的提示就说明配置成功了。
可视化界面安装:
图形界面-ZooViewer:https://blog.csdn.net/u010889616/article/details/80792912
代码操作zkclient:
<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
API总结:
- new ZkClient("127.0.0.1:2181",5000); 创建zookeeper客户端
- client.getChildren("/"):获取子节点 “/”代表根节点
- client.createPersistent:创建持久节点
- client.createPersistentSequential:创建持久有顺节点,会在path后面增加序号
- client.createEphemeral:创建临时节点
- client.createEphemeralSequential:创建临时有序节点
- client.subscribeChildChanges:订阅子节点的改变
- client.subscribeDataChanges:订阅某个节点的数据改变
结尾:
使用的话,就按照api来,这里我就不做过多说明,很简单的。