06_zookeeper原生Java API使用

2021-06-22 08:04

阅读:495

标签:ide   down   连接服务器   多个   out   客户   dem   process   会话   

【Zookeeper构造方法概述】

/**
     * 客户端和zk服务端的连接是一个异步的过程
     * 当连接成功后,客户端会收到一个watch通知
     *
     * ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
     *          long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)
     * 参数介绍
     * connectString:连接服务器的ip字符串
     *      比如:"192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181"
     *      可以是一个ip,也可以是多个ip,一个ip代表单机,多个ip代表集群
     *      也可以在ip后加路径
     * sessionTimeout:超时时间,心跳收不到了,那就超时
     * watcher:通知事件,如果有对应的事件触发,则会收到一个通知:如果不需要,那就设为null
     * sessionId:会话的id
     * sessionPasswd:会话密码,当会话丢失后,可以依据sessionId和sessionPasswd重新获取会话
     * canBeReadOnly:可读,当这个物理机节点断开后,还是可以读到数据的,只是不能写,
     *                此时数据被读取到的可能是旧数据,一般设置为false,不推荐使用
     *
     */
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)

 

【Zookeeper API 客户端连接服务端例子】

package com.zk.demo;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

/**
 * Created by HigginCui on 2018/9/20.
 */
public class ZkConnect implements Watcher{

    public static final String zkServerPath = "127.0.0.1:2181";

    public static final Integer timeout = 5000;

    /**
     * 客户端和zk服务端的连接是一个异步的过程
     * 当连接成功后,客户端会收到一个watch通知
     */
    public static void main(String[] args) throws Exception{
        ZooKeeper zk = new ZooKeeper(zkServerPath,timeout,new ZkConnect());

        for (int i=0;i20;i++) {
            Thread.sleep(10);  //休眠10ms,在这个过程中,连接状态会从CONNECTING--->CONNECTED
            System.out.println(i+"---"+zk.getState());
        }

    }

    @Override
    public void process(WatchedEvent watchedEvent) {
        System.err.println("收到zk的watch通知----" );
    }
}

【运行结果】

技术分享图片

【使用CountDownLatch优化zk连接过程】 

package com.zk.demo;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

import java.util.concurrent.CountDownLatch;

public class ZkConnect implements Watcher{

    public static final String zkServerPath = "127.0.0.1:2181";

    public static final Integer timeout = 5000;

    private static CountDownLatch latch = new CountDownLatch(1);

    public static void main(String[] args) throws Exception{
        ZooKeeper zk = new ZooKeeper(zkServerPath,timeout,new ZkConnect());

        System.out.println("连接状态---" + zk.getState());
        latch.await();
        System.out.println("连接状态---" + zk.getState());

    }

    @Override
    public void process(WatchedEvent watchedEvent) {
        System.err.println("收到zk的watch通知----" );
        latch.countDown();
    }
}

【运行结果】

技术分享图片

 

06_zookeeper原生Java API使用

标签:ide   down   连接服务器   多个   out   客户   dem   process   会话   

原文地址:https://www.cnblogs.com/HigginCui/p/9678505.html


评论


亲,登录后才可以留言!