06_zookeeper原生Java API使用
2021-06-22 08:04
标签:ide down 连接服务器 多个 out 客户 dem process 会话 【Zookeeper构造方法概述】 【Zookeeper API 客户端连接服务端例子】 【运行结果】 【使用CountDownLatch优化zk连接过程】 【运行结果】 06_zookeeper原生Java API使用 标签:ide down 连接服务器 多个 out 客户 dem process 会话 原文地址:https://www.cnblogs.com/HigginCui/p/9678505.html/**
* 客户端和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)
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通知----" );
}
}
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();
}
}