概述:
1、设置Zookeeper ClassPath
为方便命令行编译,我们都知道编译过程需要依赖于第三方jar,这里就是依赖于Zookeeper的jar,一般我们都是依赖IDE进行编译了(常用例如eclipse),今天也尝试一下通过命令行编译java。问题来了,我们怎么知道Zookeeper依赖那些jar,你是否记得bin目录下有zkEnv.cmd文件(window系统下用),这个就是启动客户端和服务端的设置一些变量,当然包括必须要的jar包。可以打开看一下:
可以试一下:(window系统不区分大小写)
2、创建一个Zookeeper会话
构造函数
Zookeeper(String connectString, int sessionTimeout, Watcher watcher)
注释:
- connectString:所有主机名和端口组成字符串
- sessionTimeout: 会话超时时间(单位毫秒)在这段时间内没有与服务器交互,服务器会自动关闭会话。
- watcher: 就是相当于信使,将服务器端的消息状态传递给客户端,Watcher是接口需要具体实现
3、实现一个Watcher(监听器)
public interface Watcher {
void process(WatchedEvent event);
}
只有一个未实现的方法import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class Master implements Watcher{
ZooKeeper zk;
String hostPort;
Master(String hostPort){
this.hostPort = hostPort;
}
void startZK() throws IOException{
zk = new ZooKeeper(hostPort, 15000, this);
}
public void process(WatchedEvent e) {
System.out.println(e);
}
public static void main(String[] args) throws Exception {
Master m = new Master(args[0]);
m.startZK();
Thread.sleep(60000);
}
}
总结:
- 1、先实例化一个Watcher,再实例化ZooKeeper,因为Zookeeper实例化之后需要回调Watcher。
- 2、线程休眠60秒,为可以看很多打印信息,注意只要完成连接,这个线程就是守护线程,也就程序退了,线程还存在。
方法一:
步骤1:首先启动Zookeeper服务器, zkServer.cmd (也就是运行Zookeeper的bin目录的zkServer.cmd文件)
步骤2:通过命令行来编译以上代码,为方便将代码放置在bin目录下
如果一下情况,说明你没有配置日志文件,将log4j.properties复制到配置文件中。
log4j:WARN No appenders could be found for logger
(org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
方法二:采用IDE工具(Eclipse)
这里采用的是Maven工程,需要手动引用jar包,当然还有日志文件
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
代码还是不变,可能然后选择Master右键Run as....配置一下参数就好
总结:如果连接失败之后,不要重新创建新会话,Zookeeper起来之后会自动检测断开连接会话,重试重连。