整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

14.2.3. 加入组

hadoop 花牛 11℃ 0评论

这个应用的下一部分是一段用于注册组成员的程序。每个组成员将作为一个程序运行,并且加入到组中。当程序退出时,这个组成员应当从组中被删除。为了实现这一点,我们在ZooKeeper的命名空间中使用短暂znode来代表一个组成员。

范例14-2中的程序JoinGroup实现了这个想法。在基类ConnectionWatcher中,对创建和连接ZooKeeper实例的程序逻辑进行了重构,参见范例14-3。

范例14-2.该程序将成员加入组

public class JoinGroup extends ConnectionWatcher {
    public void join(String groupName, String memberName) throws KeeperException, InterruptedException {
        String path = "/"+ groupName + "/" + memberName;
        String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        System.out.printIn("Created " + createdPath);
    }
    public static void main(String[] args) throws Exception {
        JoinGroup joinGroup = new 3oinGroup();
        joinGroup.connect(args[0]);
        joinGroup.join(angs[1], args[2]);
        // stay alive until process is killed or thread is interrupted
        Thread.sleep(Long.MAX_VALUE);
    }
}

范例14-3.该辅助类等待与ZooKeeper建立连接

public class ConnectionWatcher implements Watcher {
    private static final int SESSION_TIMEOUT = 5000;
    protected 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) {
        if (event.getState() == KeeperState.SyncConnected) {
            connectedSignal.countDown();
        }
    }
    public void close() throws InterruptedException {
        zk.close();
    }
}

JoinGroup的代码与CreateGroup的非常相似。在它的join()方法中,创建短暂znode作为组znode的子节点,然后通过休眠来模拟正在做某种工 作,直到该进程被强行终止。接着,你会看到随着进程终止,这个短暂znode 被 ZooKeeper 删除。

转载请注明:全栈大数据 » 14.2.3. 加入组

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址