zookeeper


zookeeper数据结构:



 java操作单机版zookeeper

 官网下载zookeeper


找到zookeeper   bin目录下的 zkServer.cmd

双击启动,如果启动不成功,在conf目录下复制zoo_sample.cfg,改名为zoo.cfg即可

再次启动,再启动zkCli.cmd

启动成功后,打开ZooInspector下build目录下的


出现以下页面则成功



java 操作 zookeeper:

导入依赖:

<dependency>
		    <groupId>org.apache.zookeeper</groupId>
		    <artifactId>zookeeper</artifactId>
		    <version>3.4.6</version>		   
		</dependency>
package com.uban.test01;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

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.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class Test01 {
	
	private static final String address="127.0.0.1:2181";
	
	private static final int session_outtime=2000;
	
	private static final CountDownLatch countDownLatch=new CountDownLatch(1);
	
	public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
		ZooKeeper zooKeeper = new ZooKeeper(address, session_outtime,new Watcher() {
			//守护线程
			public void process(WatchedEvent event) {
				// TODO Auto-generated method stub
				KeeperState state = event.getState();
				if (KeeperState.SyncConnected==state) {
					EventType type = event.getType();
					if (type==EventType.None) {
						try {
							Thread.sleep(3000);
						} catch (Exception e) {
							// TODO: handle exception
						}
						countDownLatch.countDown();
						System.out.println("zk开始启动连接");
					}
				}
			} 
		});
		//阻塞,直到countDownLatch为0释放
		countDownLatch.await();
		//主线程
		//创建永久节点
//		String create = zooKeeper.
//				create("/last2", "lasting".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//		System.out.println("新增节点信息:"+create);
		//zooKeeper.close();
		//创建临时节点
		String create = zooKeeper.
				create("/last2", "temp".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
		System.out.println("新增节点信息:"+create);
		//连接关闭后,临时节点会被删除
		//Thread.sleep(5000);
		
	}
	
}

运行,查看zooinspector,出现新的节点,则成功


使用switcher监视节点变化:

package com.uban.test01;

import java.io.IOException;
import java.lang.Thread.State;
import java.util.concurrent.CountDownLatch;

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

public class Test02 implements Watcher {
	private static final String address="127.0.0.1:2181";
	
	private static final int session_outtime=2000;
	
	private static final CountDownLatch countDownLatch=new CountDownLatch(1);
	
	ZooKeeper zk;
	//创建连接
	public void createConnection(String connectString,int sessionTimeout) throws IOException {
		zk=new ZooKeeper(connectString, sessionTimeout, this);
		countDownLatch.countDown();
		System.out.println("zk开始启动连接");
	}
	public boolean createNode(String path,String data) {
		// TODO Auto-generated method stub
		
		try {
			exist(path, true);
			countDownLatch.await();
			String create = zk.
					create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
			System.out.println("新增节点,path:"+path+"data:"+data);
			
			return true;
		}catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		
		
	}
	
	public Stat exist(String path,boolean iswathch) {
		try {
			return zk.exists(path, iswathch);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		}
	}
	
	//事件通知
	public void process(WatchedEvent event) {
		System.out.println("开始");
		// TODO Auto-generated method stub
		//获取事件状态
		KeeperState state = event.getState();
		//获取节点路径
		String path=event.getPath();
		
		
		//获取事件类型
		EventType type = event.getType();
		System.out.println(state+"   "+path+"    "+type);	
		
		if (KeeperState.SyncConnected==state) {
			
			if (type==EventType.None) {
				
				countDownLatch.countDown();
				
			}else if (type==EventType.NodeCreated) {
				System.out.println("获取事件通知,新增Node节点"+path);
			}
		}
		System.out.println("结束");
	}
	
	public boolean upadateNode(String path,String data) {
		try {
			exist(path, true);
			zk.setData(path, data.getBytes(), -1);
			return true;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return false;
		}
	}
	
	public void close() {
		
		if (zk!=null) {
			try {
				zk.close();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) throws IOException {
		Test02 test02 = new Test02();
		test02.createConnection(address, session_outtime);
		test02.createNode("/test/001", "001");
		test02.close();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值