具有 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 "Getting Started":
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);
}
}
此博客 post、Zookeeper Java API examples 包含一些很好的示例,如果您正在寻找 Java 示例作为起点。 Zookeeper 还提供了一个非常易于使用的客户端 API 库(C 和 Java)。
Zookeeper 是最好的开源服务器和服务之一,有助于可靠地协调分布式进程。 Zookeeper 是一个 CP 系统(参考 CAP 定理),它提供了 Consistency 和 Partition tolerance。跨所有节点复制 Zookeeper 状态使其成为最终一致的分布式服务。
这个post几乎包含了与Zookeeper交互所需的所有操作。
https://www.tutorialspoint.com/zookeeper/zookeeper_api.htm
- 用数据创建ZNode
- 删除ZNode
- 获取 ZNodes(子节点)列表
- 检查 ZNode 是否存在
- 编辑 ZNode 的内容...
如果您使用的是 AWS;现在我们可以创建支持基于 URI 重定向的内部 ELB .. 这可以真正解决这个问题,高可用性已经内置。
这就是您所能得到的最简单的方法。我正在构建一个工具,它将使用 ZK 来锁定正在处理的文件(因此 class 名称):
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) {
}
}
我试图在我们的项目中使用 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 "Getting Started":
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);
}
}
此博客 post、Zookeeper Java API examples 包含一些很好的示例,如果您正在寻找 Java 示例作为起点。 Zookeeper 还提供了一个非常易于使用的客户端 API 库(C 和 Java)。
Zookeeper 是最好的开源服务器和服务之一,有助于可靠地协调分布式进程。 Zookeeper 是一个 CP 系统(参考 CAP 定理),它提供了 Consistency 和 Partition tolerance。跨所有节点复制 Zookeeper 状态使其成为最终一致的分布式服务。
这个post几乎包含了与Zookeeper交互所需的所有操作。 https://www.tutorialspoint.com/zookeeper/zookeeper_api.htm
- 用数据创建ZNode
- 删除ZNode
- 获取 ZNodes(子节点)列表
- 检查 ZNode 是否存在
- 编辑 ZNode 的内容...
如果您使用的是 AWS;现在我们可以创建支持基于 URI 重定向的内部 ELB .. 这可以真正解决这个问题,高可用性已经内置。
这就是您所能得到的最简单的方法。我正在构建一个工具,它将使用 ZK 来锁定正在处理的文件(因此 class 名称):
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) {
}
}