ZkClient 是git上一个开源的Zookeeper客户端,ZkClient 在 Zookeeper 原生API接口的基础上进行了包装,是一个更加易用的Zookeeper客户端。同时,ZkClient在内部实现了 Session 超时重连、Watchar 反复注册等功能。
引入jar包
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.5</version>
</dependency>
ZkClient 的构造函数
public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout,
ZkSerializer zkSerializer, long operationRetryTimeout){ this(new ZkConnection(zkServers, sessionTimeout), connectionTimeout, zkSerializer, operationRetryTimeout); }
需要注意的是 ,ZkSerializer 是一个序列化器,对应 java 中的序列化器 是 SerializableSerializer
/* */ public class SerializableSerializer /* */ implements ZkSerializer /* */ { /* */ public Object deserialize(byte[] bytes) /* */ throws ZkMarshallingError /* */ { /* */ try /* */ { /* 31 */ ObjectInputStream inputStream = new TcclAwareObjectIputStream(new ByteArrayInputStream(bytes)); /* 32 */ return inputStream.readObject(); /* */ } /* */ catch (ClassNotFoundException e) { /* 35 */ throw new ZkMarshallingError("Unable to find object class.", e); /* */ } catch (IOException e) { /* 37 */ throw new ZkMarshallingError(e); /* */ } /* */ } /* */ /* */ public byte[] serialize(Object serializable) throws ZkMarshallingError /* */ { /* */ try { /* 44 */ ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); /* 45 */ ObjectOutputStream stream = new ObjectOutputStream(byteArrayOS); /* 46 */ stream.writeObject(serializable); /* 47 */ stream.close(); /* 48 */ return byteArrayOS.toByteArray(); /* */ } catch (IOException e) { /* 50 */ throw new ZkMarshallingError(e); /* */ } /* */ } /* */ }