创建一个zookeeper的会话(实现watcher)
2016-01-16 16:21
399 查看
在先前的章节中,我们利用zkCli去了解了一下基本的zookeeper的操作,在接下来的章节中,我们将会学习一下在应用中是如何利用zookeeper的api的,接下来我们将利用一个程序展示一下,如何来创建一个回话和监视。那么下面我们将开始一个主从模式的结构例子。
创建一个zookeeper的会话
如下面所示,每一个建立的会话一旦它的连接被破坏,将会转移到其他的zookeeper服务,只要会话保持通畅,那么句柄将会有效。那么zookeeper客户端类库将会经历的保持连接。如果句柄关闭了,那么zookeeper客户端的类库会告诉zookeeper服务端终止会话。如果zookeeper了解到客户端已经死掉了,它将会验证会话。如果以后客户端向再次恢复这个会话,将会通过这个句柄来验证一个会话的有效性。
Zookeeper的构造函数如下所示
ZooKeeper(
String connectString,
int sessionTimeout,
Watcher watcher)
connectString:包含了zookeeper服务端的主机名和端口号,
sessionTimeOut:会话的超时时间,是以毫秒为单位的
watcher:当我们收到一个会话事件的时候,需要去创建一个对象。因为watch是一个接口,因此我们需要去实现该接口,从而完成zookeeper构造函数的初始化。客户端需要用监视去观察zookeeper的会话状态。当客户端建立连接或者失去连接的时候,就会创建该事件,该事件也能够利用来监视zookeeper数据的改变。最后如果会话过期后,该事件也可以监听到,最终通过客户端。
实现一个监视
为了能够通知客户端,我们需要实现一个监视。该接口信息如下所示
public interface Watcher {
void process(WatchedEventevent);
}
实现一个watcher
/**
* @FileName: master.java
* @Package:com.test
* @Description: TODO
* @author: LUCKY
* @date:2016年1月15日 下午7:54:58
* @version V1.0
*/
package com.test;
import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
/**
* @ClassName: master
* @Description: 实现一个maste的watcher
* @author: LUCKY
* @date:2016年1月15日 下午7:54:58
*/
public class master implements Watcher {
ZooKeeper zk;
String hostPort;
/**
*
*/
public master(String hostPort) {
this.hostPort = hostPort;
}
void startZk() throws IOException {
zk = new ZooKeeper(hostPort, 15000, this);
}
public void process(WatchedEvent event) {
System.out.println(event);
}
void stopZk() throws Exception {
zk.close();
}
public static void main(String[] args) throws Exception {
master m = new master("100.66.162.90:2180");
m.startZk();
Thread.sleep(60000);
m.stopZk();
}
}
上面的例子就是一个简单的实现water的master类,可以尝试连接一下,看一下控制台打印的信息
创建一个zookeeper的会话
如下面所示,每一个建立的会话一旦它的连接被破坏,将会转移到其他的zookeeper服务,只要会话保持通畅,那么句柄将会有效。那么zookeeper客户端类库将会经历的保持连接。如果句柄关闭了,那么zookeeper客户端的类库会告诉zookeeper服务端终止会话。如果zookeeper了解到客户端已经死掉了,它将会验证会话。如果以后客户端向再次恢复这个会话,将会通过这个句柄来验证一个会话的有效性。
Zookeeper的构造函数如下所示
ZooKeeper(
String connectString,
int sessionTimeout,
Watcher watcher)
connectString:包含了zookeeper服务端的主机名和端口号,
sessionTimeOut:会话的超时时间,是以毫秒为单位的
watcher:当我们收到一个会话事件的时候,需要去创建一个对象。因为watch是一个接口,因此我们需要去实现该接口,从而完成zookeeper构造函数的初始化。客户端需要用监视去观察zookeeper的会话状态。当客户端建立连接或者失去连接的时候,就会创建该事件,该事件也能够利用来监视zookeeper数据的改变。最后如果会话过期后,该事件也可以监听到,最终通过客户端。
实现一个监视
为了能够通知客户端,我们需要实现一个监视。该接口信息如下所示
public interface Watcher {
void process(WatchedEventevent);
}
实现一个watcher
/**
* @FileName: master.java
* @Package:com.test
* @Description: TODO
* @author: LUCKY
* @date:2016年1月15日 下午7:54:58
* @version V1.0
*/
package com.test;
import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
/**
* @ClassName: master
* @Description: 实现一个maste的watcher
* @author: LUCKY
* @date:2016年1月15日 下午7:54:58
*/
public class master implements Watcher {
ZooKeeper zk;
String hostPort;
/**
*
*/
public master(String hostPort) {
this.hostPort = hostPort;
}
void startZk() throws IOException {
zk = new ZooKeeper(hostPort, 15000, this);
}
public void process(WatchedEvent event) {
System.out.println(event);
}
void stopZk() throws Exception {
zk.close();
}
public static void main(String[] args) throws Exception {
master m = new master("100.66.162.90:2180");
m.startZk();
Thread.sleep(60000);
m.stopZk();
}
}
上面的例子就是一个简单的实现water的master类,可以尝试连接一下,看一下控制台打印的信息
相关文章推荐
- single number 系列 参考
- django 中配置 static
- Python手动构造Cookie模拟登录后获取网站页面内容
- 拉开大变革序幕(下):分布式计算框架与大数据
- 黄聪:C# 开发Chrome内核浏览器(WebKit.net)
- 自己定义progressdialog载入动画,这里还有旋转的载入条,美团,多个图片动画
- Android 4.4 meminfo 实现分析
- android解决No system images installed for this target
- Centos5.4虚拟机安装
- jq ajax向后台传递数组
- JavaSE8-Stream,LocalDateTime
- 人工智能之卡尔曼滤波器浅析及matlab实战(很好的入门)
- log4cplus
- C# 获取本机指定类型指定网卡的Ip地址
- lua排序算法
- 图像积分图的计算
- cmd环境下实现:为命令设置别名、启动cmd时自动执行bat
- 利用yum下载软件包的三种方法
- win7系统安装Windows Live Writer失败提示错误代码0x80190194的解决方法
- 读取视频的常见错误——cvCreateFileCapture