Java 客户端

  • pom.xml 文件中引入相关api
 <dependency>      <groupId>org.apache.zookeeper</groupId>      <artifactId>zookeeper</artifactId>      <version>3.5.4-beta</version></dependency>
  • 创建连接
/** * 创建 zookeeper 会话 * <p> * <p> * zookeeper 客户端 和 服务端创建会话的过程是异步的。也就是客户度通过构造方法创建会话后立即返回,此时的连接并没有完全建立。 * 当真正的会话建立完成后,zk服务端会给客户端通知一个事件,客户端获取通知之后在表明连接正在建立。 */public class ZooKeeperClientSession implements Watcher {    //用于等待zk服务端通知    private static CountDownLatch latch = new CountDownLatch(1);    public static void main(String[] args) throws Exception {        ZooKeeper zooKeeper = new ZooKeeper("127.0.0.1:2183", 5000, new ZooKeeperClientSession());        System.out.println(zooKeeper.getState());        latch.await();        long sessionId = zooKeeper.getSessionId();        byte[] sessionPasswd = zooKeeper.getSessionPasswd();        System.out.println(zooKeeper.getSessionId());        /**         *  利用 sessionId 和 sessionPasswd 复用会话连接         */        ZooKeeper zooKeeper1 = new ZooKeeper("127.0.0.1:2183",                5000,                new ZooKeeperClientSession(),                sessionId,                sessionPasswd);        System.out.println(zooKeeper1.getSessionId());    }    /**     * 处理 zookeeper 服务端的 Watcher 通知     * @param watchedEvent     */    public void process(WatchedEvent watchedEvent) {        System.out.println("receive watch event : " + watchedEvent);        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {            latch.countDown();        }    }}
1.构造函数说明
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)ZooKeeper(String connectString,           int sessionTimeout,           Watcher watcher,          boolean canBeReadOnly)ZooKeeper(String connectString,          int sessionTimeout,           Watcher watcher,           long sessionId,           byte[] sessionPasswd)ZooKeeper(String connectString,           int sessionTimeout,           Watcher watcher,          long sessionId,           byte[] sessionPasswd,           boolean canBeReadOnly)
参数作用
connectStringzk服务器列表,由英文逗号分开的字符串,例如:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183;也可以是带有目录的字符:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183/zk-book
sessionTimeout会话超时时间,以毫秒为单位。在一个会话周期内,zk客户端和服务端通过心跳来检查连接的有效性,一旦在sessionTimeout时间内没有进行心跳检测,则会话失效
watcherzk允许客户端在构造方法中传入一个Watcher接口实现类作为事件通知处理器
sessionId、sessionPasswd利用sessionId 和 sessionPasswd 确保复用会话连接
canBeReadOnly用于标识当前会话是否支付只读模式。在zk集群模式中,如果一台集群和集群中过半以上的机器都都失去了网络连接,那么这个机器将不再处理客户端请求,包括读写请求。但在某些情况下出现类似问题,我们希望该台机器能够处理读请求,此时为 read-only 模式
  • 创建节点