zookeeper之java-api 客户端的使用

本文详细介绍了如何使用Java API连接Zookeeper,包括创建、获取和更新节点的步骤及示例代码,帮助开发者快速掌握ZK客户端操作。

1.java-api客户端连接zk

1.1.格式

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
        throws IOException
    {
        this(connectString, sessionTimeout, watcher, false);
    }
connectString zk连接地址,如果多个用英文逗号分开
sessionTimeout  客户端连接session超时时间(单位毫秒数)
watcher  监听后的事件处理 

1.2.样例

	ZooKeeper zk=new ZooKeeper("127.0.0.1:2181,127.0.0.1:2182", 30000, new Watcher(){
			/**
			 * 
			 * @Description: 这里就是事件回调通知的回调方法
			 * @Author: gaoxinfu
			 * @Time:2019年1月1日 上午8:31:05
			 */
			public void process(WatchedEvent event) {
				// TODO Auto-generated method stub
				System.out.println(event.getState());
				System.out.println(event.getType());
				System.out.println(event.getPath());
			}
		});

2.java-api客户端-创建节点

2.1.格式

public String create(final String path, byte data[], List<ACL> acl,CreateMode createMode)
path:节点路径
data:节点值
acl:节点的权限控制 枚举
createMode:创建的节点类型,可以看枚举

2.2.样例

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class ZkClientTest {

	public static void main(String[] args) throws IOException, Exception {
		/**
		 * 构造java-zk 客户端实例
		 */
		ZooKeeper zk=new ZooKeeper("127.0.0.1:2181,127.0.0.1:2182", 30000, new Watcher(){
			/**
			 * 
			 * @Description: 这里就是事件回调通知的回调方法
			 * @Author: gaoxinfu
			 * @Time:2019年1月1日 上午8:31:05
			 */
			public void process(WatchedEvent event) {
				// TODO Auto-generated method stub
				System.out.println(event.getState());
				System.out.println(event.getType());
				System.out.println(event.getPath());
			}
		});
		zk.create("/myGirls", "性感的".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
		zk.close();
	}
}

2.java-api客户端-获取节点值

    /**
     * @param path the given path 路径
     * @param watch whether need to watch this node 是否监听该节点
     * @param stat the stat of the node 节点的状态
     * @return the data of the node 节点的数据
     */
    public byte[] getData(String path, boolean watch, Stat stat)
zk.getData("/myGirls", true, null);

3.java-api客户端-更新节点值

3.1.格式

    public Stat setData(final String path, byte data[], int version)
    path:节点路径
    data:节点值
    version:版本,如果交给zk去维护,则传递-1

3.2.样例

public class ZkClientTest {

	public static void main(String[] args) throws IOException, Exception {
		/**
		 * 构造java-zk 客户端实例
		 */
		ZooKeeper zk=new ZooKeeper("127.0.0.1:2181,127.0.0.1:2182", 30000, new Watcher(){
			/**
			 * 
			 * @Description: 这里就是事件回调通知的回调方法
			 * @Author: gaoxinfu
			 * @Time:2019年1月1日 上午8:31:05
			 */
			public void process(WatchedEvent event) {
				// TODO Auto-generated method stub
				System.out.println(event.getState());
				System.out.println(event.getType());
				System.out.println(event.getPath());
			}
		});
		
//		zk.create("/myGirls", "性感的".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
//		zk.create("/myGirls", "性感的".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		
		//相当于对节点 "/myGirls"设置了数据变化的监听,一旦节点数据变化,监听就会触发,不变化 不会
//		zk.getData("/myGirls", true, null);
		
		//这里对节点数据进行了修改,那么设置的监听就会触发
		zk.setData("/myGirls", "美丽的".getBytes(), -1);
		zk.close();
	}
}

输出

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
SyncConnected
None
null
SyncConnected
NodeDataChanged
/myGirls

SyncConnected
NodeDataChanged
/myGirls
这三个输出是由于我们做了setData操作,导致节点值发生了变化,触发了watcher事件
注意
zk.setData("/myGirls", “美丽的”.getBytes(), -1);
zk.setData("/myGirls", “美丽的”.getBytes(), -1);
这样的数据变化,只会监听通知一次;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东山富哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值