第1关:会话创建与关闭

40 篇文章 5 订阅
6 篇文章 1 订阅

为了完成本关任务,你需要掌握: 1.ZooKeeper 的实例化; 2.实例化中不同参数的作用。

客户端连接ZooKeeper服务器

要连接 ZooKeeper 的服务器,实例化一个 ZooKeeper 对象即可,使用以下 API:

 
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

其中 connectString 表示主机名和 ZooKeeper 服务器的端口。 sessionTimeout 表示 ZooKeeper 等待客户端通信的最长时间,该参数以毫秒为单位,一般设置超时时间为 5000-15000 毫秒。watcher 用于监听节点的状态变化,如果发生变化则通知此 watcher ,做出相应处理。如果不需要监听,则可设置为 null。

声明一个 ZooKeeper 的对象示例:

ZooKeeper zk = ("localhost:2181", 15000, null);

该对象会去连接本地 (localhost)zookeeper 服务器,设置会话超时时间为 15000 毫秒,且不监视节点状态变化。

断开ZooKeeper的连接

断开客户端和服务器之间的连接,直接使用实例化之后的 zk 对象,调用 close()方法即可,如下所示:

示例如下:

// 创建方法 createZKInstance,用于连接 ZooKeeper 服务器
private void createZKInstance() throws IOException {
// 创建 zk 实例
zk = new ZooKeeper("127.0.0.1:2181", 15000, null);
}

// 创建方法 ZKClose,用于关闭连接
private void ZKClose() throws InterruptedException {
zk.close();
}

实现一个Watcher

为了从 ZooKeeper 接收消息,需要实现监视点。监视点主要是 Watcher 接口,该接口的定义如下:

public interface Watcher{
void process(WatcherEvent event);
}

Watcher 接口中没有实现任何内容,因此,我们可以在 process 方法中实现自己的逻辑。

public void process(WatchedEvent event) {
System.out.println(event);
}

在上面的代码中,我们简单的将事件输出,当然了,也可以根据实际需要,更改代码。

本节实训的示例程序及运行结果输出如下所示:

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class test1 {
// 实现一个 Watcher
private Watcher wh = new Watcher() {
public void process(WatchedEvent event) {
System.out.println(event);
}
};

// 创建方法 createZKInstance,用于连接 ZooKeeper 服务器
private void createZKInstance() throws IOException {
// 创建 zk 实例
zk = new ZooKeeper("127.0.0.1:2181", 15000, this.wh);

}

// 创建方法 ZKClose,用于关闭连接
private void ZKClose() throws InterruptedException {
// 关闭连接
zk.close();
}

public static void main(String[] args) throws IOException, InterruptedException{
// 调用 reateZKInstance 方法,连接 ZooKeeper 服务器
reateZKInstance();
// 调用 ZKClose 方法,关闭连接
ZKClose();
}
}

执行结果:

WatchedEvent state:SyncConnected type:None path:null

该结果是 Watcher 监视器返回的结果,各个属性代表的意思会在后续讲解。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,实现客户端连接 ZooKeeper 服务器(需要实现 Watcher 监视)和断开的功能。

import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class test1 {
    // 初始化 ZooKeeper 实例
    private ZooKeeper zk;
    // 实现一个 Watcher
    // 请在此处编写代码
    /********* Begin *********/
    private Watcher wh = new Watcher() {  
    public void process(WatchedEvent event) {  
        System.out.println(event);  
    }  
};
    /********* End *********/
    // 连接 ZooKeeper 服务器
    private void createZKInstance() throws IOException {
        // 请在此处编写代码
        /********* Begin *********/
    zk = new ZooKeeper("127.0.0.1:2181", 15000, this.wh);
        /********* End *********/
    }
    // 断开连接
    private void ZKClose() throws InterruptedException {
        // 请在此处编写代码
        /********* Begin *********/
    zk.close();  
        /********* End *********/
    }
    public static void main(String[] args) throws IOException, InterruptedException{
        test1 test = new test1();
        //  连接 ZooKeeper 服务器
        test.createZKInstance();
        // 断开连接
        test.ZKClose();
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值