簡體   English   中英

具有Java客戶端的優秀Zookeeper Hello world程序

[英]Good Zookeeper Hello world Program with Java client

我試圖在我們的項目中使用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 Java API examples包括一些很好的實例。 Zookeeper還提供了一個非常易於使用的客戶端API庫(C和Java)。

Zookeeper是最好的開源服務器和服務之一,可幫助可靠地協調分布式過程。 Zookeeper是一種CP系統(請參閱CAP定理),可提供一致性和分區容限。 Zookeeper狀態跨所有點的復制使其成為最終一致的分布式服務。

這篇文章幾乎包含了與Zookeeper交互所需的所有操作。 https://www.tutorialspoint.com/zookeeper/zookeeper_api.htm

  1. 使用數據創建ZNode
  2. 刪除ZNode
  3. 獲取ZNodes列表(兒童)
  4. 檢查ZNode是否存在
  5. 編輯ZNode的內容...

如果您在AWS上; 現在,我們可以創建內部ELB,它支持基於URI的重定向。使用已經引入的高可用性,它可以真正解決此問題。

這就是您所能獲得的最簡單的方法。 我正在構建一個工具,該工具將使用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