标签: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;i<20;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(); } }
【运行结果】
标签:ide down 连接服务器 多个 out 客户 dem process 会话
原文地址:https://www.cnblogs.com/HigginCui/p/9678505.html