ZooKeeper监视Watcher实例

本文通过实例展示了ZooKeeper的Watcher机制。首先开启监视器客户端,然后创建并观察一个节点,接着创建第二个客户端继续观察。即使关闭其中一个客户端,监视器仍能接收到节点变化的通知。
摘要由CSDN通过智能技术生成

在上几篇搞懂了Watcher的理论之后,依照网上的资料,写了一段ZooKeeper关于Watcher的实例。(注释里解释的很详细了)

监视器:

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

/**
 * 监视服务器
 * @author tangxuelei
 *
 */
public class ZKServerWatcher implements Watcher {
	private String groupNode = "sgroup";
	private ZooKeeper zk;
	private Stat stat = new Stat();
	//用Map存储服务器信息,key是服务器节点path,value是服务器信息。服务器信息又 包含了服务器名称和负载
	private volatile Map<String, ServerInfo> serverMap = new HashMap<String, ServerInfo> ();
	
	/*
	 * 连接zk
	 */
	public void connectZooKeeper() throws Exception {
		//这里的this就是注册了一个默认Watcher,不过注意该Watcher并不是一次性的。
		zk = new ZooKeeper("127.0.0.1:2183", 2000, this);
		//查看要检测的服务器集群的根节点是否存在,如果不存在,则创建
        zk.create("/"+groupNode, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        updateServerList();
	}
	
	
	/*
	 * 更新服务器列表
	 */
	private void updateServerList() throws Exception {
		Map<String, ServerInfo> newServerMap = new HashMap<String, ServerInfo>();
		
		// 获取并监听groupNode的子节点变化  
        // watch参数为true, 表示监听子节点变化事件.   
        // 每次都需要重新注册监听, 因为一次注册, 只能监听一次事件, 如果还想继续保持监听, 必须重新注册  
		
		//这里的true表示注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值