c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~