返回介绍

创建组

发布于 2025-01-04 01:04:22 字数 2469 浏览 0 评论 0 收藏 0

我们使用 zookeeper 的 Java API 来创建一个 /zoo 的组节点:

public class CreateGroup implements Watcher {
 private static final int SESSION_TIMEOUT = 5000;
 private ZooKeeper zk;
 private CountDownLatch connectedSignal = new CountDownLatch(1);
 public void connect(String hosts) throws IOException, InterruptedException {
     zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
     connectedSignal.await();
 }

 @Override
 public void process(WatchedEvent event) { // Watcher interface
     if (event.getState() == KeeperState.SyncConnected) {
     connectedSignal.countDown();
     }
 }

 public void create(String groupName) throws KeeperException,
 InterruptedException {
     String path = "/" + groupName;
     String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE,
     CreateMode.PERSISTENT);
     System.out.println("Created " + createdPath);
 }

 public void close() throws InterruptedException {
     zk.close();
 }

 public static void main(String[] args) throws Exception {
     CreateGroup createGroup = new CreateGroup();
     createGroup.connect(args[0]);
     createGroup.create(args[1]);
     createGroup.close();
     }
 }

main() 执行时,首先创建了一个 CreateGroup 的对象,然后调用 connect() 方法,通过 zookeeper 的 API 与 zookeeper 服务器连接。创建连接我们需要 3 个参数:一是服务器端主机名称以及端口号,二是客户端连接服务器 session 的超时时间,三是 Watcher 接口的一个实例。Watcher 实例负责接收 Zookeeper 数据变化时产生的事件回调。

在连接函数中创建了 zookeeper 的实例,然后建立与服务器的连接。建立连接函数会立即返回,所以我们需要等待连接建立成功后再进行其他的操作。我们使用 CountDownLatch 来阻塞当前线程,直到 zookeeper 准备就绪。这时,我们就看到 Watcher 的作用了。我们实现了 Watcher 接口的一个方法:

public void process(WatchedEvent event);

当客户端连接上了 zookeeper 服务器,Watcher 将由 process() 函数接收一个连接成功的事件。我们接下来调用 CountDownLatch,释放之前的阻塞。

连接成功后,我们调用 create() 方法。我们在这个方法中调用 zookeeper 实例的 create() 方法来创建一个 znode。参数包括:一是 znode 的 path;二是 znode 的内容(一个二进制数组),三是一个 access control list(ACL,访问控制列表,这里使用完全开放模式),最后是 znode 的性质。

znode 的性质分为 ephemeral 和 persistent 两种。ephemeral 性质的 znode 在创建他的客户端的会话结束,或者客户端以其他原因断开与服务器的连接时,会被自动删除。而 persistent 性质的 znode 就不会被自动删除,除非客户端主动删除,而且不一定是创建它的客户端可以删除它,其他客户端也可以删除它。这里我们创建一个 persistent 的 znode。

create() 将返回 znode 的 path。我们讲新建 znode 的 path 打印出来。

我们执行如上程序:

% export CLASSPATH=ch21-zk/target/classes/:$ZOOKEEPER_HOME/*:\
$ZOOKEEPER_HOME/lib/*:$ZOOKEEPER_HOME/conf
% java CreateGroup localhost zoo
Created /zoo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文