当前位置:首页 » 编程语言 » java的zookeeper

java的zookeeper

发布时间: 2023-09-17 05:45:24

1. java连接zookeeper集群,必须配置多个ip吗

zookeeper的集群一般都是奇数,多采用三台服务器,就是一个leader,两个follower的模式,你只填一个IP,那就是单机模式

2. java项目打成war后,项目中用到的zookeeper或mq等服务需要再安装吗

肯定需要啊。目前没有那哪种编译器是内置了zookeeper和mq的,只是提供了对应的驱动和检测功能。另外,在你的编译器上运行时肯定也是需要另外启动zk和mq的,打包的时候是不会把单独的第三方程序打包进去的。

3. java连接zookeeper的时候报错,请问下是什么原因啊

常见错误日志如下:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss

1. 原因:
是因为ZooKeeper建立连接时采用异步操作,连接操作后并不能保证ZK连接已成功。如果在ZK连接成功前的这个小时间窗口去访问ZK,就会碰到如上错误。
2. 解决思路
我们在新建ZK连接后要等一段时间,保证连接成功后再访问ZK。

3. 网上比较赞同的解决方案:
主要利用两个Java类:

(1)java.util.concurrent.CountDownLatch:
一个同步辅助类,类似倒数计数,直到计数器为0时才能对资源“解锁”。未解锁前等待该资源的进程只能被阻塞。

主要方法:
public CountDownLatch(int count); /* 构造函数,参数指定计数次数 */
public void countDown(); /* 当前线程调用此函数,则计数减一 */
public void await() throws InterruptedException; /* 此函数会一直阻塞当前线程,直到计时器的值为0为止 */

(2)org.apache.zookeeper.Watcher
ZooKeeper有一个很有用的功能,就是集群上每一个变化都可以通知到自定义的Watchcer。

4. zookeeper怎么用java创建临时节点

基本操作
下面给出基本的操作 ZooKeeper 的示例代码,这样你就能对 ZooKeeper 有直观的认识了。下面的清单包括了创建与 ZooKeeper 服务器的连接以及最基本的数据操作:

ZooKeeper 基本的操作示例

// 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT,
ClientBase.CONNECTION_TIMEOUT, new Watcher() {
// 监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("已经触发了" + event.getType() + "事件!");
}
});
// 创建一个目录节点
zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// 创建一个子目录节点
zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath",false,null)));
// 取出子目录节点列表
System.out.println(zk.getChildren("/testRootPath",true));
// 修改子目录节点数据
zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]");
// 创建另外一个子目录节点
zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null)));
// 删除子目录节点
zk.delete("/testRootPath/testChildPathTwo",-1);
zk.delete("/testRootPath/testChildPathOne",-1);
// 删除父目录节点
zk.delete("/testRootPath",-1);
// 关闭连接
zk.close();

输出的结果如下:

已经触发了 None 事件!
testRootData
[testChildPathOne]
目录节点状态:[5,5,,,0,1,0,0,12,1,6]
已经触发了 NodeChildrenChanged 事件!
testChildDataTwo
已经触发了 NodeDeleted 事件!
已经触发了 NodeDeleted 事件!

当对目录节点监控状态打开时,一旦目录节点的状态发生变化,Watcher 对象的 process 方法就会被调用。

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:427
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:552
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:738
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:531
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:141
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:227
java驼峰 发布:2025-02-02 09:13:26 浏览:646
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:527
linuxadobe 发布:2025-02-02 09:09:43 浏览:207
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:721