java连接zookeeper的3种方式小结

网友投稿 251 2022-11-23

java连接zookeeper的3种方式小结

目录java连接zookeeper3种方式1、使用zookeeper原始api2、使用ZkClient客户端连接,这种连接比较简单3、使用curator连接Java集成zookeeper笔记一、引入zookeeper-3.4.5.jar(原生zk包)二、手写ZookeeperBase.java

java连接zookeeper3种方式

1、使用zookeeper原始api

public class Demo {

private static String ip = "192.168.0.101:2181";

private static int session_timeout = 40000;

private static CountDownLatch latch = new CountDownLatch(1);

public static void main(String[] args) throws Exception {

ZooKeeper zooKeeper = new ZooKeeper(ip, session_timeout, new Watcher() {

@Override

public void process(WatchedEvent watchedEvent) {

if(watchedEvent.getState() == Event.KeeperState.SyncConnected) {

//确认已经连接完毕后再进行操作

latch.countDown();

System.out.println("已经获得了连接");

}

}

});

//连接完成之前先等待

latch.await();

ZooKeeper.States states = zooKeeper.getState();

System.out.println(states);

}

}

打印:

如果打印出来的状态为 CONNECTED 则表示连接成功

2、使用ZkClient客户端连接,这种连接比较简单

public class ZkClientTest {

private static String ip = "192.168.0.101:2181";

private static int session_timeout = 40000;

public static void main(String[] args) {

ZkClient zkClient = newhttp:// ZkClient(ip,session_timeout);

System.out.println(zkClient.getChildren("/"));

}

}

打印:

3、使用curator连接

public class CuratorDemo {

//ZooKeeper服务地址

private static final String SERVER = "192.168.0.101:2181";

//会话超时时间

private static final int SESSION_TIMEOUT = 30000;

//连接超时时间

private static final int CONNECTION_TIMEOUT = 5000;

/**

* baseSleepTimeMs:初始的重试等待时间

* maxRetries:最多重试次数

*

*

* ExponentialBackoffRetrhttp://y:重试一定次数,每次重试时间依次递增

* RetryNTimes:重试N次

* RetryOneTime:重试一次

* RetryUntilElapsed:重试一定时间

*/

private static final RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

public static void main(String[] args) throws Exception {

//创建 CuratorFrameworkImpl实例

CuratorFramework client = CuratorFrameworkFactory.newClient(SERVER, SESSION_TIMEOUT, CONNECTION_TIMEOUT, retryPolicy);

//启动

client.start();

System.out.println("连接成功!");

Object o = client.getChildren().forPath("/");

System.out.println(o);

}

}

打印:

Java集成zookeeper笔记

一、引入zookeeper-3.4.5.jar(原生zk包)

slf4j.jar即可,其他还有zkClient和Curator,其中Curator封装的zk客户端组件最好用。

二、手写ZookeeperBase.java

少废话,上代码:

简单的创建连接和增删改查操作:

public class ZookeeperBase{

//zk集群地址(端口号为客户端端口号)

private static final String CONNECT_ADDR = "192.168.241.127:2181,192.168.241.128:2181,192.168.241.129:2181";

//session 超时时间,单位毫秒

private static final int SESSION_OUTTIME = 5000;

//用于阻塞程序执行,直到zk成功连接后再发送继续执行信号,因为zk建立连接是异步的,阻塞是防止程序在zk成功连接前被调用。

private static final CountDownLatch contectedSemaphore = new CountDownLatch (1);

public static void main(String[] args)throws Exception{

Zookeeper zk = new Zookeeper(CONNECT_ADDR,SESSION_OUTTIME,new Watcher()){

http:// @override

public void process(WatcherEvent event){ //WatcherEvent为观察者监听事件

//获取事件状态(与客户端连接状态相关)

/*

* KeeperState:Disconneced 连接失败

* KeeperState:SyncConnected 连接成功

* KeeperState:AuthFailed 认证失败

* KeeperState:Expired 会话过期

*/

KeeperState keeperState = event.getState();

//获取事件类型(与zknode相关)

/*

* EventType:NodeCreated 节点创建

* EventType:NodeDataChanged 节点的数据变更

* EventType:NodeChildrentChanged 子节点下的数据变更

* EventType:NodeDeleted 节点删除

* EventType:None 刚连接什么都没做

*/

EventType eventType = event.getType();

//成功建立连接(固定写法)

if(KeeperState.SyncConnected == keeperState){

if(EventType.None == eventType){

//发送信号让程序继续执行

contectedSemaphore.countDown();

}

}

}

//阻塞程序执行

contectedSemaphore.await();

//创建节点

//同步创建

String newNode = zk.create("/testRoot","data".getBytes(),ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

/*

*参数1:节点路径:/testRoot,原生api不允许递归创建节点,即没有父节点不允许直接连带父子节点一起创建。创建节点是要写全路径,例如:/testRoot/children。

*参数2:节点内容:内容类型为字节数组,不支持存储序列化对象,例如不支持将java对象序列化为json存储,但可以使用java序列化框架,如hession或kyso。

*参数3:权限控制:在对权限要求不严格情况下都使用OPENhttp://_ACL_UNSAFE开放权限即可。

*参数4:节点类型:提供了四种类型。

*PERSISTENT 持久化节点

*PERSISTENT SEQUENTIAL 持久顺序节点

*EPHEMERAL 临时节点

*EPHEMERAL SEQUENTIAL 临时顺序节点

*/

};

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一些用于练习的几个较小的数据集
下一篇:OpenCV3.1录制视频+把图片合成视频(同时解决一个OpenCV不能打开自己录制的视频的小问题)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~