Java操作Zookeeper客户端API

    Java操作Zookeeper的API围绕Zookeeper的句柄(handle)而构建,每个API调用都需要传递这个句柄,这个句柄代表与Zookeeper之间的一个会话。

    创建Zookeeper句柄的构造函数如下

   ZooKeeper zooKeeper=new ZooKeeper(String connectString,int sessionTimeout,Watcher watcher);

   connectString:包含主机名和服务器的端口,如127.0.0.1:2181

   sessionTimeout:以毫秒为单位,表示ZooKeeper等待客户端通信的最大时间,超时声明会话死亡,一般设置超时时间为5~10秒

   watcher:用于接受会话事件的一个对象,Watcher定义为接口,需要我们自己实现一个类,然后传入ZooKeeper构造函数中。客户端使用Watcher接口来监控与Zookeeper之间会话的健康情况。与ZooKeeper服务器之间建立或失去连接时就会产生事件。同样可以应用于监控ZooKeeper数据的变化。最终,如果与ZooKeeper的会话过期,也会通过Watcher接口传递事件来通知客户端的应用。

实现Java连接ZooKeeper服务端,实现一个Watcher

package com.my.service;

import java.io.IOException;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;

public class MyZookeeper {

	private ZooKeeper zooKeeper;
    private String hostPort;
    
    public MyZookeeper(String hostPort) {
		this.hostPort=hostPort;
	}
	//创建一个zk连接监视点,打印断开连接日志信息
	Watcher watcher = new Watcher() {

		public void process(WatchedEvent event) {
			//如果监控到与服务端连接断开,打印日志
			if (KeeperState.Disconnected.equals(event.getState())) {
				System.out.println("Zookeeper Disconnected!客户端与ZooKeeper服务器连接断开!");
			}

		}

	};
    //连接到zk服务端
	public void startZk() throws IOException {
		zooKeeper = new ZooKeeper(hostPort, 15000, watcher);
	}
	
	public static void main(String[] args) throws IOException, InterruptedException {
		MyZookeeper myZookeeper=new MyZookeeper("127.0.0.1:2181");
		myZookeeper.startZk();
		//线程休眠30秒,断开服务端查看Watch监视效果
		Thread.sleep(30000);
	}
}

启动ZooKeeper服务端,运行程序,然后将ZooKeeper服务器关闭,查看监视点是否监视到连接断开。如下图,断开服务器后,监视点监视到了与服务端连接断开

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐