zookeeper的安装与JavaAPI的使用

灰太狼 2022-09-30 06:46 186阅读 0赞

这一篇主要是介绍 zookeeper 开发环境的搭建以及客户端Java API的使用

1. zookeeper开发环境搭建

(1)首先要去官网下载安装包, 下面给出传送门:
http://mirror.bit.edu.cn/apache/zookeeper/stable/

下载之后解压,这里我是解压在 /opt/目录下:

$tar -zxvf zookeeper-3.4.9.tar,gz

(2)解压之后就是要配置环境变量:
我是子啊Mac 下,所以是 ~/.bash_profile 文件中配置, 如果是Linux下的话,应该是在~/.bashrc 下配置

  1. export ZOOKEEPER_HOME=/opt/zookeeper-3.4.9
  2. export PATH=$PATH:$ZOOKEEPER_HOME/bin

(3)配置了环境变量之后,就可以设置 zookeeper的配置文件了,默认是 zookeeper-3.4.9/conf/zoo.cfg 配置文件在zookeeper服务端在启动时被加载, 但是conf目录下并没有这个文件,所以我们直接把conf目录下的 zoo_sample.cfg 复制成zoo.cfg 就OK,配置内容直接用默认的。

(4) 启动服务端:运行一下命令:

$zkServer.sh start

这时服务端就启动了,通过以下命令可以查看服务端是否启动成功:

¥echo ruok | nc localhost 2181

具体执行过程可以看下图:
这里写图片描述

2. Java API的使用

对于zookeeper 的客户端连接, zookeeper 提供了一套 Java API来进行连接调用。

具体的详解这里就不给出了,直接给出具体的代码:

客户端连接回调的观察者ConnectionWatcher.java

  1. package com.zookeeper.lyt;
  2. import org.apache.zookeeper.*;
  3. import java.util.concurrent.CountDownLatch;
  4. /** * Created by louyuting on 2017/3/18. * 在 Zookeeper 中新建组 : /zoo */
  5. public class ConnectionWatcher implements Watcher{
  6. private static final int SESSION_TIMEOUT = 5000;
  7. protected ZooKeeper zk;
  8. private CountDownLatch connectedSignal = new CountDownLatch(1);
  9. public void connect(String hosts) throws Exception{
  10. //传入: 主机地址; 会话超时参数; Watcher对象,用于接收来自zookeeper的回调,获得各种事件的通知.
  11. //内部会创建一个线程连接到服务器;
  12. zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
  13. //等待连接成功的响应.
  14. connectedSignal.await();
  15. }
  16. // override
  17. // 当客户端与服务端建立成功之后, watcher 的 process()方法会被调用. 参数是一个用于表示该连接的事件.
  18. public void process(WatchedEvent watchedEvent) {
  19. //返回响应, 表示连接已经成功
  20. if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
  21. connectedSignal.countDown();
  22. }
  23. }
  24. /** * 创建一个新的 Zookeeper 的 znode, * @param groupName * @throws Exception */
  25. public void create(String groupName) throws Exception{
  26. String path = "/" + groupName;
  27. String createdPath = zk.create(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  28. System.out.println("created " + createdPath);
  29. }
  30. public void close() throws Exception{
  31. zk.close();
  32. }
  33. }

创建组 CreateGroup.java

  1. package com.zookeeper.lyt;
  2. import org.apache.zookeeper.*;
  3. import java.util.concurrent.CountDownLatch;
  4. /** * Created by louyuting on 2017/3/18. * 在 Zookeeper 中新建组 : /zoo */
  5. public class CreateGroup implements Watcher{
  6. private static final int SESSION_TIMEOUT = 5000;
  7. private ZooKeeper zk;
  8. private CountDownLatch connectedSignal = new CountDownLatch(1);
  9. public void connect(String hosts) throws Exception{
  10. //传入: 主机地址; 会话超时参数; Watcher对象,用于接收来自zookeeper的回调,获得各种事件的通知.
  11. //内部会创建一个线程连接到服务器;
  12. zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
  13. //等待连接成功的响应.
  14. connectedSignal.await();
  15. }
  16. // override
  17. // 当客户端与服务端建立成功之后, watcher 的 process()方法会被调用. 参数是一个用于表示该连接的事件.
  18. public void process(WatchedEvent watchedEvent) {
  19. //返回响应, 表示连接已经成功
  20. if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
  21. connectedSignal.countDown();
  22. }
  23. }
  24. /** * 创建一个新的 Zookeeper 的 znode, * @param groupName * @throws Exception */
  25. public void create(String groupName) throws Exception{
  26. String path = "/" + groupName;
  27. String createdPath = zk.create(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  28. System.out.println("created " + createdPath);
  29. }
  30. public void close() throws Exception{
  31. zk.close();
  32. }
  33. // main
  34. public static void main(String[] args) throws Exception {
  35. CreateGroup createGroup = new CreateGroup();
  36. createGroup.connect("ip:port");
  37. createGroup.create("zoo");
  38. createGroup.close();
  39. }
  40. }

加入组 JoinGroup.java

  1. package com.zookeeper.lyt;
  2. import org.apache.zookeeper.CreateMode;
  3. import org.apache.zookeeper.ZooDefs;
  4. import java.util.concurrent.TimeUnit;
  5. /** * Created by louyuting on 2017/3/18. * 加入组 */
  6. public class JoinGroup extends ConnectionWatcher {
  7. public void join(String groupName, String menberName) throws Exception{
  8. String path = "/" + groupName + "/" + menberName;
  9. String createdPath = zk.create(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
  10. System.out.println("created " + createdPath);
  11. }
  12. public static void main(String[] args) throws Exception {
  13. JoinGroup joinGroup = new JoinGroup();
  14. joinGroup.connect("ip:port");
  15. joinGroup.join("zoo", "cow");
  16. TimeUnit.MICROSECONDS.sleep(Long.MAX_VALUE);
  17. }
  18. }

列出组:ListGroup.java

  1. package com.zookeeper.lyt;
  2. import org.apache.zookeeper.KeeperException;
  3. import java.util.List;
  4. /** * Created by louyuting on 2017/3/18. * * 列出组成员 */
  5. public class ListGroup extends ConnectionWatcher {
  6. public void list(String groupName) throws Exception{
  7. String path = "/" + groupName;
  8. try {
  9. List<String> children= zk.getChildren(path, false);
  10. if(children.isEmpty()){
  11. System.out.println( path + " is empty");
  12. System.exit(1);
  13. }else {
  14. for (String child : children){
  15. System.out.println(child);
  16. }
  17. }
  18. } catch (KeeperException e) {
  19. e.printStackTrace();
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. public static void main(String[] args) throws Exception {
  25. ListGroup listGroup = new ListGroup();
  26. listGroup.connect("ip:port");
  27. listGroup.list("zoo");
  28. listGroup.close();
  29. }
  30. }

删除组 DeleteGroup.java

  1. package com.zookeeper.lyt;
  2. import org.apache.zookeeper.KeeperException;
  3. import java.util.List;
  4. /** * Created by louyuting on 2017/3/18. * * 列出组成员 */
  5. public class DeleteGroup extends ConnectionWatcher {
  6. public void delete(String groupName) throws Exception{
  7. String path = "/" + groupName;
  8. try {
  9. List<String> children= zk.getChildren(path, false);
  10. for (String child : children){
  11. zk.delete(path + "/" + child, -1);
  12. }
  13. zk.delete(path, -1);
  14. } catch (KeeperException.NoNodeException e) {
  15. e.printStackTrace();
  16. System.out.println(groupName + " is not existed");
  17. System.exit(1);
  18. } catch (InterruptedException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. public static void main(String[] args) throws Exception {
  23. DeleteGroup deleteGroup = new DeleteGroup();
  24. deleteGroup.connect("ip:port");
  25. deleteGroup.delete("zoo");
  26. deleteGroup.close();
  27. }
  28. }

发表评论

表情:
评论列表 (有 0 条评论,186人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ZooKeeper安装部署

    一、系统要求 ZooKeeper可以运行在多种系统平台上面,表1展示了zk支持的系统平台,以及在该平台上是否支持开发环境或者生产环境。 表1:ZooKeeper支持的运