- 浏览: 209908 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (267)
- java.lang (8)
- 问题汇总 (21)
- 异常记录 (20)
- 功能实现 (19)
- 面试总结 (25)
- 技巧总结 (8)
- 常用代码 (4)
- 编程习惯 (3)
- 编码规则 (3)
- java.util (10)
- java.io (1)
- JavaWeb (9)
- MySQL (16)
- SVN (3)
- MyBatis (11)
- Velocity (7)
- 其他知识 (10)
- 人生哲理 (1)
- 人生故事 (1)
- 自我感悟 (1)
- shiro (3)
- 基础知识 (0)
- 问题总结 (1)
- Spring 标签 (1)
- Spring (3)
- 点滴生活 (1)
- DOS (1)
- CAS (4)
- Linux (9)
- Storm (6)
- Shell (1)
- regex (1)
- Collection (4)
- poi (1)
- 经典语句 (1)
- NIO (5)
- concurrent (14)
- RPC (1)
- zookeeper (3)
- 待整理 (2)
- Hadoop (9)
- RabbitMq (2)
- flume (1)
- hive (7)
- hbase (4)
- kafka (1)
- scala (1)
- GC (0)
- java.util.concurrent.atomic (1)
- java.lang.ref (6)
- JVM (2)
- algorithm (1)
- conception (1)
- java key word (1)
- sun.misc (1)
最新评论
一、
导入 JAR包
解压zookeeper安装包
lib 目录下的面的JAR+zookeeper.jar
新建 zookeeper的JAVA工程
新建 lib 文件夹,复制JAR包至lib文件夹中
全选 JAR,右键 --> build path --> add
二、
多次变化,均可监控到
create /aaa xxx
create /bbb xxx
delete /aaa
导入 JAR包
解压zookeeper安装包
lib 目录下的面的JAR+zookeeper.jar
新建 zookeeper的JAVA工程
新建 lib 文件夹,复制JAR包至lib文件夹中
全选 JAR,右键 --> build path --> add
二、
import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; 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.ZooKeeper; public class ZkDemo { /** * @param args * @throws IOException * @throws InterruptedException * @throws KeeperException */ public static void main(String[] args) throws IOException, InterruptedException, KeeperException { // 内部类调用外部类的变量,变量需为 final final CountDownLatch count = new CountDownLatch(1); // 1.创建会话 String connectString = "192.168.76.131:2181,192.168.76.134:2181,192.168.76.132:2181" ; final ZooKeeper zookeeper = new ZooKeeper(connectString, 5000, new Watcher() { public void process(WatchedEvent event) { // 确保连接状态成功 // 方法:使用 countDownLatch if(event.getState() == KeeperState.SyncConnected){ count.countDown(); } } }); // 由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞 count.await(); // 2. // 创建节点:同步方式,会发生阻塞,只有创建成功之后,程序才会执行下去 // String create = zookeeper.create("/park", "abcd".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // System.out.println(create); // 返回创建节点信息 // 创建节点:异步方式,程序不阻塞,但执行完毕后,不保证节点创建成功 // zookeeper.create("/park2", "abcd".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new StringCallback() { // // public void processResult(int rc, String path, Object ctx, String name) { // System.out.println("创建完毕:节点名称:"+name); // } // }, null); // while(true){ // 什么都不做;添加原因是:异步创建节点,只有SYSO执行后才是创建成功, // 因为是异步执行,所以程序会继续执行下去,但因为下面无代码可执行了,程序结束了 // 所以SYSO无输出,但节点已创建完毕 // } // 3.删除 // 同步方法:version:-1 匹配任务版本 // zookeeper.delete("/park2", -1); // 异步方法: // zookeeper.delete("/park", -1, new VoidCallback() { // // public void processResult(int rc, String path, Object ctx) { // System.out.println("删除完毕:路径名称:"+path); // } // }, null); // while(true){} // 4.读取-子节点 // List<String> children = zookeeper.getChildren("/", new Watcher() { // // public void process(WatchedEvent event) { // if(event.getType() == EventType.NodeChildrenChanged){ // try { // // 运行;在虚拟机中执行 zkCli.sh create /park // // 节点发生变化,控制台打印输出当前所有节点 // // 只能监控一次变化,再次创建则无效 // List<String> list = zookeeper.getChildren("/", false); // for(String s : list){ // System.out.println(s); // } // } catch (KeeperException e) { // e.printStackTrace(); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // } // }); // for(String s : children){ // System.out.println(s); // } // while(true){ // // } } }
多次变化,均可监控到
create /aaa xxx
create /bbb xxx
delete /aaa
import java.io.IOException; import java.util.List; import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.AsyncCallback.DataCallback; import org.apache.zookeeper.AsyncCallback.StatCallback; 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.ZooKeeper; import org.apache.zookeeper.data.Stat; public class ZkDemo1 { private static ZooKeeper zookeeper = null ; public static void main(String[] args) throws IOException, InterruptedException, KeeperException { final CountDownLatch count = new CountDownLatch(1); String connectString = "192.168.76.131:2181,192.168.76.134:2181,192.168.76.132:2181" ; zookeeper = new ZooKeeper(connectString, 5000, new Watcher() { public void process(WatchedEvent event) { if(event.getState() == KeeperState.SyncConnected){ count.countDown(); } // 5.获取节点数据,当数据发生变化时 if(event.getType() == EventType.NodeDataChanged){ String path = event.getPath(); System.out.println(path+"节点数据发生变化"); try { byte[] datas = zookeeper.getData(path, true, null); System.out.println("变化后的数据:"+new String(datas)); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } // 7.节点创建或删除时打印 if(event.getType() == EventType.NodeCreated || event.getType() == EventType.NodeDeleted){ String path = event.getPath(); try { Stat stat = zookeeper.exists(path, true); System.out.println(stat); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } }); count.await(); // 4.获取 childrenNode // List<String > list = zookeeper.getChildren("/", new ChildrenWatcher()); // for(String s : list){ // System.out.println(s); // } // 5.获取节点数据 // 同步 byte[] datas = zookeeper.getData("/poi", true, null); System.out.println(new String(datas)); // 异步 zookeeper.getData("/park", true, new DataCallback() { public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) { System.out.println(new String(data)); } }, null); // 6.更新数据 zookeeper.setData("/poi", "2222222".getBytes(), -1); zookeeper.setData("/park", "33333333".getBytes(), -1, new StatCallback() { public void processResult(int rc, String path, Object ctx, Stat stat) { System.out.println("path:"+path+"stat:"+stat); } }, null); // 7.节点是否存在 Stat exist = zookeeper.exists("/parkx", true); System.out.println(exist); while(true){} } static class ChildrenWatcher implements Watcher{ public void process(WatchedEvent event) { if(event.getType() == EventType.NodeChildrenChanged){ List<String> childrenList = null ; try { // 后续的数据变更,有 Watcher 进行监控输出 childrenList = zookeeper.getChildren("/", new ChildrenWatcher()); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } for(String s : childrenList){ System.out.println(s); } } } } }
相关推荐
当一个服务提供者启动时,它会在ZooKeeper上注册自己的服务,而服务消费者则会通过ZooKeeper获取到服务提供者的地址列表,从而实现服务的动态调用。这种方式使得服务发现和负载均衡变得更加灵活,同时增强了系统的...
7. 客户端API:Zookeeper提供了丰富的Java和C语言的API,方便开发者进行集成和编程。 在解压"zookeeper-3.3.6.tar.gz"后,我们通常会得到如下结构的文件和目录: - bin:包含启动和停止Zookeeper的服务脚本。 - ...
例如,在Dubbo中,服务提供者会在ZooKeeper上注册自己,而服务消费者则通过ZooKeeper找到并调用服务提供者的接口。同样,在Spring Cloud中,Eureka或Zookeeper可以作为服务注册中心,帮助各微服务实例互相发现和通信...
4. 客户端API:提供了丰富的Java和C语言接口,方便开发者进行集成。 三、Zookeeper在Dubbo中的应用 1. 服务注册与发现:每个Dubbo服务提供者会在启动时向Zookeeper注册自己的服务,服务消费者则可以通过Zookeeper...
Java连接Zookeeper主要依赖于Apache ZooKeeper项目提供的Java客户端库,这个库包含了处理Zookeeper会话、操作数据节点以及监听事件的关键组件。在给定的压缩包文件中,可能包含了以下核心的jar包: 1. **zookeeper....
在Java环境中,我们可以使用Zookeeper的Java客户端API来与Zookeeper服务器进行交互。主要包含以下操作: 1. **连接Zookeeper**:使用`ZooKeeper`类的`connect`方法,指定服务器地址和会话超时时间。 2. **创建节点...
在Java开发中,zookeeper-3.4.5.jar作为一个依赖库,提供了丰富的API供开发者调用,实现对Zookeeper的各种操作。 首先,命名服务是Zookeeper的基础特性之一。通过创建、删除和更新Zookeeper中的节点(ZNode),...
总结起来,这个"Dubbo+zookeeper调用java接口"的案例旨在演示如何在分布式环境中,通过Dubbo和Zookeeper实现服务的发布、注册、查找和调用。开发者可以通过分析和运行这个案例,深入了解Dubbo和Zookeeper的协同工作...
- `src/main/java/org/apache/zookeeper/client`:客户端的实现,包括连接管理和API调用。 - `src/main/java/org/apache/zookeeper/data`:数据模型相关的类,如ZNode的元数据结构。 - `src/main/java/org/apache/...
在Java中,Zookeeper提供了丰富的API供开发者使用,如`org.apache.zookeeper.ZooKeeper`类是核心接口,用于与Zookeeper服务器通信。通过`connect()`方法建立连接,然后可以调用`create()`, `exists()`, `getData()`,...
Dubbo会自动通过Zookeeper找到对应的服务实例进行调用。 3. 引入Seata:为了实现分布式事务,项目需要引入Seata的相关依赖,并配置Seata Server。在服务中,通过Seata提供的API进行事务的开启、提交或回滚,保证...
Zookeeper 能够保证在分布式系统中数据的一致性,并且它提供的 API 允许客户端通过简单的调用来与 Zookeeper 服务进行交互。 #### 二、Zookeeper 的核心概念 ##### 2.1 ZNode ZNode(Zookeeper Node)是 ...
对于JDK 8u171,解压`jdk-8u171-linux-x64.gz`后,将其添加到系统路径,以便在任何地方都能调用Java命令。在Linux环境下,可以将解压后的`bin`目录添加到`PATH`环境变量中,确保系统能识别Java命令。同时,还需要...
安装完成后,开发者可以通过编写Java程序调用ZooKeeper的API来实现所需的功能。 总的来说,"zookeeper-3.4.13.rar"是一个包含了ZooKeeper稳定版本的压缩包,适合Java开发者快速搭建分布式协调服务环境。通过深入...
在Java环境中,Curator是一个优秀的Zookeeper客户端库,简化了与Zookeeper的交互,包括服务注册与发现。本文将深入探讨如何利用Curator实现这一功能。 首先,Curator提供了一套完整的API来抽象服务注册与发现,包括...
接着,在C代码中包含必要的头文件,并链接ZooKeeper的库,就可以调用ZooKeeper API进行操作了。 总的来说,ZooKeeper 3.5.6版的C客户端为Linux系统提供了一个强大且便捷的工具,使得开发人员可以在自己的应用中轻松...
在 Java 开发中,我们通常使用 ZooKeeper 的 Java 客户端 API 来进行交互。这个例子“zookeeper-registry-example”可能包含以下组件: 1. **服务提供者(Service Provider)**:编写 Java 代码,实现具体业务逻辑...
第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及...
第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及...
第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及...