本教程使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命�为 zookeeper-demo,并且引入如下�赖,�以自行在maven中央仓库选择�适的版本,介�原生 API 和 Curator 两�方�。

IntelliJ IDEA 相关介�:

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.8</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.0</version> </dependency>

maven 工程目录结构:

一�客户端的 zookeeper 原生 API

使用 zookeeper 原生 API,连接上一教程�建的三��务组�的集群,因为连接需�时间,用 countDownLatch 阻塞,等待连接�功,控制�输出连接状��

实例

...public static void main(String[] args) { try { final CountDownLatch countDownLatch=new CountDownLatch(1); ZooKeeper zooKeeper= new ZooKeeper("192.168.3.33:2181," + "192.168.3.35:2181,192.168.3.37:2181", 4000, new Watcher() { @Override public void process(WatchedEvent event) { if(Event.KeeperState.SyncConnected==event.getState()){ //如果收到了�务端的�应事件,连接�功 countDownLatch.countDown(); } } }); countDownLatch.await(); //CONNECTED System.out.println(zooKeeper.getState()); } } ...

控制�输出 connected 显示连接�功!

简�示例添加节点 API:

zooKeeper.create("/runoob","0".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

�示:更多命令功能使用请�考本教程��章节。

�时在�务端终端执行命令,显示设置�功。

二�客户端的curator连接

Curator 是 Netflix 公�开�的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端�常底层的细节开�工作,包括连接�连���注册 Watcher 和 NodeExistsException 异常等。

Curator 包�了几个包:

  • curator-framework:对 zookeeper 的底层 api 的一些å°�装。
  • curator-client:æ��供一些客户端的æ“�作,例如é‡�试策略等。
  • curator-recipes:å°�装了一些高级特性,如:Cache 事件监å�¬ã€�选举ã€�分布å¼�é”�ã€�分布å¼�计数器ã€�分布å¼� Barrier 等。

简�使用示例:

实例

public class CuratorDemo { public static void main(String[] args) throws Exception { CuratorFramework curatorFramework=CuratorFrameworkFactory. builder().connectString("192.168.3.33:2181," + "192.168.3.35:2181,192.168.3.37:2181"). sessionTimeoutMs(4000).retryPolicy(new ExponentialBackoffRetry(1000,3)). namespace("").build(); curatorFramework.start(); Stat stat=new Stat(); //查询节点数� byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/runoob"); System.out.println(new String(bytes)); curatorFramework.close(); } }

上一步设置了 /runoob 节点值,所以控制�输出。

curator 相关�考链接: http://curator.apache.org/。

demo ��打包文件:

Download