zookeeper java客户端简单API

要使用java的API首先在项目中添加以下的依赖

		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
		</dependency>

zookeeper客户端对应的增删改查的API对应都有同步跟异步的API。

一、同步创建节点

package com.aicong.test.helloZookeeper;

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

/**
 * 建立连接
 * 
 * @author aicong
 *
 */
public class CreateNodeSync implements Watcher {
	private static ZooKeeper zookeeper;

	public static void main(String[] args) throws Exception {
		// 这里是异步连接
		zookeeper = new ZooKeeper("112.74.219.174", 5000, new CreateNodeSync());
		System.out.println(zookeeper.getState());
		// 不给主线程结束
		Thread.sleep(Integer.MAX_VALUE);
	}

	@Override
	public void process(WatchedEvent event) {

		System.out.println("收到事件," + event);

		// 如果建立连接
		if (event.getState() == KeeperState.SyncConnected) {
			dosomething();
		}
	}

	
	//异步创建节点
	private void dosomething() {
		String path;
			//Ids.OPEN_ACL_UNSAFE 权限信息,所有用户有权限
			//CreateMode.PERSISTENT 创建一个永久节点
		    //new StringCallback() 回调处理方法
		    //"123456" 传入回调中的字符串
			zookeeper.create("/node_5", "12345".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT,new StringCallback(),"123456");
		
		//System.out.println("do something");
	}
	static class StringCallback implements AsyncCallback.StringCallback{
           //arg0 返回码,如果成功返回0
	  //arg1 返回路径
	  //arg2 上下文
	  //arg3 真实路径
		@Override
		public void processResult(int arg0, String arg1, Object arg2,
				String arg3) {
			StringBuilder sb = new StringBuilder();
			sb.append("arg0=" + arg0).append("\n");
			sb.append("arg1=" + arg1).append("\n");
			sb.append("arg2=" + arg2).append("\n");
			sb.append("arg3=" + arg3).append("\n");
			System.out.println(sb.toString());
		}
		
	}

}


二、异步创建节点

package com.aicong.test.helloZookeeper;

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

/**
 * 建立连接
 * 
 * @author aicong
 *
 */
public class CreateNodeASync implements Watcher {
	private static ZooKeeper zookeeper;

	public static void main(String[] args) throws Exception {
		// 这里是异步连接
		zookeeper = new ZooKeeper("112.74.219.174:2181", 5000, new CreateNodeASync());

		System.out.println(zookeeper.getState());
		// 不给主线程结束
		Thread.sleep(Integer.MAX_VALUE);
	}

	@Override
	public void process(WatchedEvent event) {

		System.out.println("收到事件," + event);

		// 如果建立连接
		if (event.getState() == KeeperState.SyncConnected) {
			dosomething();
		}
	}

	private void dosomething() {
		String path;
		try {
			//Ids.OPEN_ACL_UNSAFE 权限信息,所有用户有权限
			//CreateMode.PERSISTENT 创建一个永久节点
			path = zookeeper.create("/node_4", "12345".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
			System.out.println("return path:" + path);
		} catch (KeeperException | InterruptedException e) {
			e.printStackTrace();
		}
		
		//System.out.println("do something");
	}

}

三、同步获取子节点

package com.aicong.test.helloZookeeper;

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

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.ZooKeeper;


public class GetChildrenSync implements Watcher{
	
	
    private static ZooKeeper zooKeeper;
	public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
				
		zooKeeper = new ZooKeeper("112.74.219.174:2181",5000,new GetChildrenSync());
		System.out.println(zooKeeper.getState().toString());
			
		Thread.sleep(Integer.MAX_VALUE);

	}
	
	private void doSomething(ZooKeeper zooKeeper){
		
		try {
			// / 获取根节点子节点
			// true 是否对子节点的变化感兴趣,是否接受EventType.NodeChildrenChanged 事件
			List<String> children =  zooKeeper.getChildren("/", true);
			System.out.println(children);
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
	}

	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub
		
		if (event.getState()==KeeperState.SyncConnected){
			 //保证建立连接后执行一次
			if (event.getType()==EventType.None && null==event.getPath()){
				doSomething(zooKeeper);
			}else{
				if (event.getType()==EventType.NodeChildrenChanged){
					try {
						System.out.println(zooKeeper.getChildren(event.getPath(), true));
					} catch (KeeperException e) {
						e.printStackTrace();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}		
		}
	}

}


其他例子可以通过下载Demo了解,链接  Demo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值