005_Java操作ZooKeeper

1. ZooKeeper的JavaClient是我们更轻松的去对ZooKeeper进行各种操作。我们仅需要引入zookeeper-3.7.0.jar和zookeeper-jute-3.7.0.jar两个jar包即可。

2. 创建会话

2.1. 客户端可以创建一个ZooKeeper实例来连接ZooKeeper服务器。

2.2. ZooKeeper构造函数的connectString参数, 连接服务器列表, 使用,分割多个服务器地址。

2.3. ZooKeeper构造函数的sessionTimeout参数, 心跳检测时间周期, 以毫秒为单位。

2.4. ZooKeeper构造函数的watcher参数, 事件处理通知器。

2.5. ZooKeeper客户端和服务器会话的创建是一个异步的过程, 也就是说在程序中, ZooKeeper实例创建完成后立即返回, 但是大多数情况下我们并没有真正构建好一个可用会话, 在会话的生命周期处于CONNECTING时才算真正建立完毕。

3. 创建节点 

3.1. ZooKeeper提供了两套创建节点的方法, 同步和异步创建节点方式。

3.2. 创建节点path参数, 节点路径, 不允许递归创建节点。

3.3. 创建节点data参数, 节点内容, 字节数组类型。

3.4. 创建节点acl参数, 节点权限, 最简单的值Ids.OPEN_ACL_UNSAFE开放权限。

3.5. 创建节点createMode参数, 创建节点类型。CreateMode.PERSISTENT持久节点; CreateMode.PERSISTENT_SEQUENTIAL持久顺序节点; CreateMode.EPHEMERAL临时节点; CreateMode.EPHEMERAL_SEQUENTIAL临时顺序节点。

3.6. 创建节点Create2Callback参数, 注册一个异步回调函数。rc: 服务器相应码, 0表示创建成功, -4表示端口未连接, -110表示指定节点存在, -112表示会话过期。path: 接口调用时传入API的数据节点的路径参数。xtx: 为接口传入API的上下文参数值。name: 实际在服务器端创建节点的名称。stat: 节点属性信息。

3.7. 创建节点ctx参数, 为接口调用传入上下文参数。

4. 创建节点例子

4.1. 新建一个名为zookeeper的Java项目, 同时拷入相关jar包

4.2. 创建Create.java

package com.zk.rm;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.AsyncCallback.Create2Callback;
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;
import org.apache.zookeeper.data.Stat;

public class Create {
	private static final String connectString = "192.168.25.133:2181,192.168.25.135:2181,192.168.25.138:2181";
	private static final CountDownLatch cdl = new CountDownLatch(1);
	
	public static void main(String[] args) {
		try {
			// 创建连接
			ZooKeeper zk = new ZooKeeper(connectString, 5000, new Watcher() {
				@Override
				public void process(WatchedEvent event) {
					if(KeeperState.SyncConnected == event.getState()) {
						// 刚刚连接成功, 没有事件
						if(EventType.None == event.getType()) {
							// 如果建立连接成功, 发送信号量, 让后续阻塞程序能够继续向下执行
							cdl.countDown();
							
							System.out.println("建立连接成功了。");
						} 
					}
				}
			});
			// 进行阻塞
			cdl.await();
			
			// 创建父节点
			String ret = zk.create("/myRoot", "创建了一个我的根节点。".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
			System.out.println(System.currentTimeMillis() + " " + ret);

			// 异步创建子节点
			zk.create("/myRoot/child1", "根节点上创建了一个child1的子节点".getBytes(), Ids.OPEN_ACL_UNSAFE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值