简体   繁体   English

具有Java客户端的优秀Zookeeper Hello world程序

[英]Good Zookeeper Hello world Program with Java client

I was trying to use Zookeeper in our project. 我试图在我们的项目中使用Zookeeper。 Could run the server..Even test it using zkcli.sh .. All good.. But couldn't find a good tutorial for me to connect to this server using Java ! 可以运行服务器。。甚至可以使用zkcli.sh对其进行测试。。都很好。。但是找不到适合我使用Java连接到该服务器的好教程! All I need in Java API is a method 我在Java API中需要的只是一个方法

public String getServiceURL ( String serviceName ) 

I tried https://cwiki.apache.org/confluence/display/ZOOKEEPER/Index --> Not good for me. 我尝试了https://cwiki.apache.org/confluence/display/ZOOKEEPER/Index- >对我不好。

http://zookeeper.apache.org/doc/trunk/javaExample.html : Sort of ok; http://zookeeper.apache.org/doc/trunk/javaExample.html :还可以; but couldnt understand concepts clearly ! 但是无法清楚地理解概念! I feel it is not explained well.. 我觉得不好解释。

Finally, this is the simplest and most basic program I came up with which will help you with ZooKeeper "Getting Started": 最后,这是我想到的最简单,最基本的程序,它将帮助您使用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);
    }

}

This blog post, Zookeeper Java API examples , includes some good examples if you are looking for Java examples to start with. 如果您正在寻找Java实例,那么此博客文章Zookeeper Java API examples包括一些很好的实例。 Zookeeper also provides a client API library( C and Java) that is very easy to use. Zookeeper还提供了一个非常易于使用的客户端API库(C和Java)。

Zookeeper is one of the best open source server and service that helps to reliably coordinates distributed processes. Zookeeper是最好的开源服务器和服务之一,可帮助可靠地协调分布式过程。 Zookeeper is a CP system (Refer CAP Theorem) that provides Consistency and Partition tolerance. Zookeeper是一种CP系统(请参阅CAP定理),可提供一致性和分区容限。 Replication of Zookeeper state across all the nods makes it an eventually consistent distributed service. Zookeeper状态跨所有点的复制使其成为最终一致的分布式服务。

This post has almost all operations required to interact with Zookeeper. 这篇文章几乎包含了与Zookeeper交互所需的所有操作。 https://www.tutorialspoint.com/zookeeper/zookeeper_api.htm https://www.tutorialspoint.com/zookeeper/zookeeper_api.htm

  1. Create ZNode with data 使用数据创建ZNode
  2. Delete ZNode 删除ZNode
  3. Get list of ZNodes(Children) 获取ZNodes列表(儿童)
  4. Check an ZNode exists or not 检查ZNode是否存在
  5. Edit the content of a ZNode... 编辑ZNode的内容...

If you are on AWS; 如果您在AWS上; now We can create internal ELB which supports redirection based on URI .. which can really solve this problem with High Availability already baked in. 现在,我们可以创建内部ELB,它支持基于URI的重定向。使用已经引入的高可用性,它可以真正解决此问题。

This is about as simple as you can get. 这就是您所能获得的最简单的方法。 I am building a tool which will use ZK to lock files that are being processed (hence the class name): 我正在构建一个工具,该工具将使用ZK锁定正在处理的文件(因此为类名):

package mypackage;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher;

public class ZooKeeperFileLock {

  public static void main(String[] args) throws IOException, KeeperException, InterruptedException {

    String zkConnString = "<zknode1>:2181,<zknode2>:2181,<zknode3>:2181";

    ZooKeeperWatcher zkWatcher = new ZooKeeperWatcher();
    ZooKeeper client = new ZooKeeper(zkConnString, 10000, zkWatcher);

    List<String> zkNodes = client.getChildren("/", true);

    for(String node : zkNodes) {
      System.out.println(node);
    }
  }

  public static class ZooKeeperWatcher implements Watcher {

    @Override
    public void process(WatchedEvent event) {
    }

  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM