Zookeeper应用的开发主要通过java客户端API去连接和Zookeeper集群。
Zookeeper提供java客户端API:
- Zookeeper官方的java客户端API
- 第三方的java客户端API,比如Curator()
Zookeeper官方客户端API提供了基本操作:创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。
官方API的不足之处:(Zookeeper官方API功能比较简单,在实际开发过程中不推荐使用)
- Zookeeper的WatcherJ监测是一次性的,每次触发之后需要重新注册。会话超时之后没有实现重连机制。
- 异常处理繁琐,Zookeeper提供了很多异常,对于开发人员来说可能根本不知道如何处理这些抛出来的异常
- 仅提供简单的byte[]数组类型的接口,没有提供Java POJO级别的序列化数据处理接口
- 创建节点时如果抛出异常,需要自行检查节点是否存在
- 无法实现级联删除
Zookeeper原生客户端使用
引入zookeeper client依赖(与服务端保持一致,否则会有很多兼容性问题)
<!-- Zookeeper client --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.8.0</version> </dependency>
Zookeeper原生客户端主要使用org.apache.zookeeper.ZooKeeper这个类来使用ZooKeeper服务。
ZooKeeper常用构造器
Zookeeper(connectString,sessionTimeout,watcher)
- connectString:使用逗号分隔的列表,每个Zookeeper节点是一个host.port对,host是机器名或者IP地址,port是ZooKeeper节点对客户端提供服务的端口号。客户端会任意选取connectString中的一个节点建立连接。
- sessionTimeout:session timeout 时间
- watcher:接收来自Zookeeper集群的事件。
使用zookeeper原生API,连接zookeeper集群
public class ZkClientDemo { private static final String CONNECT_STR="localhost:2181"; private final static String CLUSTER_CONNECT_STR="192.168.65.156:2181,192.168.65.190:2181,192.168.65.200:2181"; public static void main(String[] args) throw