java - 好的 Zookeeper Hello world 程序与 Java 客户端

标签 java apache-zookeeper

我试图在我们的项目中使用 Zookeeper。可以运行服务器..甚至使用 zkcli.sh 测试它..一切都很好.. 但是找不到一个好的教程让我使用 Java 连接到这个服务器!我在 Java API 中只需要一个方法

public String getServiceURL ( String serviceName ) 

我试过了 https://cwiki.apache.org/confluence/display/ZOOKEEPER/Index --> 对我不好。

http://zookeeper.apache.org/doc/trunk/javaExample.html : 还可以;但无法清楚地理解概念!感觉没解释好..

最佳答案

最后,这是我想出的最简单和最基本的程序,它将帮助您“入门”ZooKeeper:

package core.framework.zookeeper;

import java.util.Date;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class ZkConnect {
    private ZooKeeper zk;
    private CountDownLatch connSignal = new CountDownLatch(0);

    //host should be 127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002
    public ZooKeeper connect(String host) throws Exception {
        zk = new ZooKeeper(host, 3000, new Watcher() {
            public void process(WatchedEvent event) {
                if (event.getState() == KeeperState.SyncConnected) {
                    connSignal.countDown();
                }
            }
        });
        connSignal.await();
        return zk;
    }

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

    public void createNode(String path, byte[] data) throws Exception
    {
        zk.create(path, data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

    public void updateNode(String path, byte[] data) throws Exception
    {
        zk.setData(path, data, zk.exists(path, true).getVersion());
    }

    public void deleteNode(String path) throws Exception
    {
        zk.delete(path,  zk.exists(path, true).getVersion());
    }

    public static void main (String args[]) throws Exception
    {
        ZkConnect connector = new ZkConnect();
        ZooKeeper zk = connector.connect("54.169.132.0,52.74.51.0");
        String newNode = "/deepakDate"+new Date();
        connector.createNode(newNode, new Date().toString().getBytes());
        List<String> zNodes = zk.getChildren("/", true);
        for (String zNode: zNodes)
        {
           System.out.println("ChildrenNode " + zNode);   
        }
        byte[] data = zk.getData(newNode, true, zk.exists(newNode, true));
        System.out.println("GetData before setting");
        for ( byte dataPoint : data)
        {
            System.out.print ((char)dataPoint);
        }

        System.out.println("GetData after setting");
        connector.updateNode(newNode, "Modified data".getBytes());
        data = zk.getData(newNode, true, zk.exists(newNode, true));
        for ( byte dataPoint : data)
        {
            System.out.print ((char)dataPoint);
        }
        connector.deleteNode(newNode);
    }

}

关于java - 好的 Zookeeper Hello world 程序与 Java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524537/

相关文章:

java - Apache Phoenix JDBC 连接 Zookeeper 错误

apache-zookeeper - 跨2个zookeeper集群复制数据的最佳方法?

hadoop - 无法从 ZooKeeper 获取主地址。我在创建 Hbase 表时遇到此错误

Java 引用值是地址值?

java - 获取状态栏的高度

Java 设计二维数组

linux - zookeeper_server.pid : Permission denied FAILED TO WRITE PID

java - 在 Java servlet 中以编程方式使用 keytool 来创建证书/ key 对

java - 如何为自定义 ImageView 的属性设置值?

java - EJB 中基于 Zookeeper 的锁