第三章:开始使用zookeeper的API

zookeeper的API围绕zookeeper的句柄而构建,每个句柄代表与zookeeper的一个会话。
已经建立的一个会话如果端口,这会话会转移到另一台zookeeper服务器上 只要会话还存活,这个句柄就有效,zookeeper客户端会保持这个活跃的连接,以保证与zookeeper服务器之间的会话存活。
如果句柄关闭,zookeeper客户端就会告知zookeeper服务器终止会话
如果zookeeper服务器发现客户端已经死掉,就会是这个会话无效
如果客户端之后尝试重新连接zookeeper服务器,使用之前无效会话对应的句柄进行连接,那么zookeeper服务器会通知客户端,这个会话已经失效,使用这个句柄进行的任何操作都会返回错误。
 
创建zookeeper句柄的构造函数:
Zookeeper(String connectString,int sessionTimeout,Watch watcher)
connectString中包含了主机名和zookeeper服务器的端口
sessionTimeout以毫秒为单位,表示zookeeper等待客户端通讯的最长时间。
watcher用于接收会话事件的一个对象,这个对象是我们自己创建的。需要实现Watcher接口。
 
实现一个简单的Watcher
public interface Watcher{
void process(WatchedEvent event);
}
 
public class Master implements Watcher {
Zookeeper zk;
Master(Zookeeper zk){
this.zk=zk;
}
 
void startZk() {
zk = Zookeeper(hostport,15000,this);
}
 
public void process(WatchedEvent event) {
System.out.println(event);
}
 
public static void main(String[] args) {
Master m = new Master();
m.startZk();
 
Thread.sleep(60000);
}
}
 
现在我们启动zookeeper服务器,然后运行Master,之后停止zookeeper服务器,并保持Master运行,你可以看到synchronized事件之后发生了Disconnected事件,当开发者遇到Disconnected事件时,不要重新创建一个新连接,zookeeper客户端库负责为你重新连接服务,当不幸遇到网络问题或者服务器故障时,zookeeper可以处理这些故障问题。
 
请不要尝试去管理zookeeper客户端连接。zookeeper客户端库会监控与zookeeper服务之间的连接,客户度库不仅告诉我们连接发生了问题,还会主动尝试重新建立通讯。

猜你喜欢

转载自www.cnblogs.com/use-D/p/10487106.html