一、创建会话

1. 创建一个基本的ZooKeeper会话实例

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.WatchedEvent;
  6. import org.apache.zookeeper.Watcher;
  7. import org.apache.zookeeper.ZooKeeper;
  8. import org.apache.zookeeper.Watcher.Event.KeeperState;
  9.  
  10. /**
  11. * 创建一个基本的ZooKeeper会话实例
  12. * @author huey
  13. * @version 1.0
  14. * @created 2015-3-1
  15. */
  16. public class ZKDemo {
  17.  
  18. public static void main(String[] args) throws Exception {
  19. final CountDownLatch connectedSignal = new CountDownLatch(1);
  20.  
  21. /**
  22. * ZooKeeper客户端和服务器会话的建立是一个异步的过程
  23. * 构造函数在处理完客户端的初始化工作后立即返回,在大多数情况下,并没有真正地建立好会话
  24. * 当会话真正创建完毕后,Zookeeper服务器会向客户端发送一个事件通知
  25. */
  26. ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {
  27. @Override
  28. public void process(WatchedEvent event) {
  29. if (event.getState() == KeeperState.SyncConnected) {
  30. connectedSignal.countDown();
  31. }
  32. }
  33. });
  34. System.out.println("State1: " + zk.getState()); // CONNECTING
  35.  
  36. connectedSignal.await();
  37. System.out.println("State2: " + zk.getState()); // CONNECTED
  38.  
  39. zk.close();
  40. System.out.println("State3: " + zk.getState()); // CLOSED
  41. }
  42.  
  43. }

2. 创建一个复用sessionId和sessionPasswd的Zookeeper对象示例

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.WatchedEvent;
  6. import org.apache.zookeeper.Watcher;
  7. import org.apache.zookeeper.ZooKeeper;
  8. import org.apache.zookeeper.Watcher.Event.KeeperState;
  9.  
  10. /**
  11. * 创建一个复用sessionId和sessionPasswd的ZooKeeper对象示例
  12. * @author huey
  13. * @version 1.0
  14. * @created 2015-3-1
  15. */
  16. public class ZKDemo {
  17.  
  18. public static void main(String[] args) throws Exception {
  19.  
  20. final CountDownLatch connectedSignal = new CountDownLatch(1);
  21. ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {
  22. @Override
  23. public void process(WatchedEvent event) {
  24. if (event.getState() == KeeperState.SyncConnected) {
  25. connectedSignal.countDown();
  26. }
  27. }
  28. });
  29.  
  30. connectedSignal.await();
  31. long sessionId = zk.getSessionId();
  32. byte[] passwd = zk.getSessionPasswd();
  33. zk.close();
  34.  
  35. final CountDownLatch anotherConnectedSignal = new CountDownLatch(1);
  36. ZooKeeper newZk = new ZooKeeper(
  37. "192.168.1.109:2181",
  38. 5000,
  39. new Watcher() {
  40. @Override
  41. public void process(WatchedEvent event) {
  42. if (event.getState() == KeeperState.SyncConnected) {
  43. anotherConnectedSignal.countDown();
  44. }
  45. }
  46. },
  47. sessionId,
  48. passwd);
  49.  
  50. anotherConnectedSignal.await();
  51. newZk.close();
  52. }
  53.  
  54. }

二、创建节点

1. 使用同步API创建一个ZNode节点

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.CreateMode;
  6. import org.apache.zookeeper.WatchedEvent;
  7. import org.apache.zookeeper.Watcher;
  8. import org.apache.zookeeper.ZooKeeper;
  9. import org.apache.zookeeper.Watcher.Event.KeeperState;
  10. import org.apache.zookeeper.ZooDefs.Ids;
  11.  
  12. /**
  13. * 使用同步API创建一个ZNode节点
  14. * @author huey
  15. * @version 1.0
  16. * @created 2015-3-1
  17. */
  18. public class ZKDemo {
  19.  
  20. public static void main(String[] args) throws Exception {
  21.  
  22. final CountDownLatch connectedSignal = new CountDownLatch(1);
  23. ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {
  24. @Override
  25. public void process(WatchedEvent event) {
  26. if (event.getState() == KeeperState.SyncConnected) {
  27. connectedSignal.countDown();
  28. }
  29. }
  30. });
  31. connectedSignal.await();
  32.  
  33. String path = zk.create(
  34. "/zk-huey",
  35. "hello".getBytes(),
  36. Ids.OPEN_ACL_UNSAFE,
  37. CreateMode.PERSISTENT
  38. );
  39. System.out.println(path + " is created.");
  40.  
  41. zk.close();
  42. }
  43.  
  44. }

2. 使用异步API创建一个ZNode节点

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.AsyncCallback;
  6. import org.apache.zookeeper.CreateMode;
  7. import org.apache.zookeeper.WatchedEvent;
  8. import org.apache.zookeeper.Watcher;
  9. import org.apache.zookeeper.ZooKeeper;
  10. import org.apache.zookeeper.Watcher.Event.KeeperState;
  11. import org.apache.zookeeper.ZooDefs.Ids;
  12.  
  13. /**
  14. * 使用异步API创建一个ZNode节点
  15. * @author huey
  16. * @version 1.0
  17. * @created 2015-3-1
  18. */
  19. public class ZKDemo {
  20.  
  21. public static void main(String[] args) throws Exception {
  22.  
  23. final CountDownLatch connectedSignal = new CountDownLatch(1);
  24. ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {
  25. @Override
  26. public void process(WatchedEvent event) {
  27. if (event.getState() == KeeperState.SyncConnected) {
  28. connectedSignal.countDown();
  29. }
  30. }
  31. });
  32. connectedSignal.await();
  33.  
  34. zk.create(
  35. "/zk-huey",
  36. "hello".getBytes(),
  37. Ids.OPEN_ACL_UNSAFE,
  38. CreateMode.PERSISTENT_SEQUENTIAL,
  39. new AsyncCallback.StringCallback() {
  40. @Override
  41. public void processResult(int rc, String path, Object ctx, String name) {
  42. // 服务器响应吗
  43. System.out.println("ResultCode: " + rc);
  44. // 接口调用时传入API的数据节点的路径参数值
  45. System.out.println("Znode: " + path);
  46. // 接口调用时传入API的ctx参数值
  47. System.out.println("Context: " + (String)ctx);
  48. // 实际在服务端创建的节点名
  49. System.out.println("Real Path: " + name);
  50. }
  51. },
  52. "The Context"
  53. );
  54.  
  55. zk.close();
  56. }
  57.  
  58. }

三、删除节点

1. 使用同API删除一个ZNode节点

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.WatchedEvent;
  6. import org.apache.zookeeper.Watcher;
  7. import org.apache.zookeeper.ZooKeeper;
  8. import org.apache.zookeeper.Watcher.Event.KeeperState;
  9.  
  10. /**
  11. * 使用同步API删除一个ZNode节点
  12. * @author huey
  13. * @version 1.0
  14. * @created 2015-3-1
  15. */
  16. public class ZKDemo {
  17.  
  18. public static void main(String[] args) throws Exception {
  19.  
  20. final CountDownLatch connectedSignal = new CountDownLatch(1);
  21. ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {
  22. @Override
  23. public void process(WatchedEvent event) {
  24. if (event.getState() == KeeperState.SyncConnected) {
  25. connectedSignal.countDown();
  26. }
  27. }
  28. });
  29. connectedSignal.await();
  30.  
  31. zk.delete("/zk-huey", -1);
  32.  
  33. zk.close();
  34. }
  35.  
  36. }

2. 使用异步API删除一个ZNode节点

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.AsyncCallback;
  6. import org.apache.zookeeper.WatchedEvent;
  7. import org.apache.zookeeper.Watcher;
  8. import org.apache.zookeeper.ZooKeeper;
  9. import org.apache.zookeeper.Watcher.Event.KeeperState;
  10.  
  11. /**
  12. * 使用异步API删除一个ZNode节点
  13. * @author huey
  14. * @version 1.0
  15. * @created 2015-3-1
  16. */
  17. public class ZKDemo {
  18.  
  19. public static void main(String[] args) throws Exception {
  20.  
  21. final CountDownLatch connectedSignal = new CountDownLatch(1);
  22. ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {
  23. @Override
  24. public void process(WatchedEvent event) {
  25. if (event.getState() == KeeperState.SyncConnected) {
  26. connectedSignal.countDown();
  27. }
  28. }
  29. });
  30. connectedSignal.await();
  31.  
  32. zk.delete(
  33. "/zk-huey",
  34. -1,
  35. new AsyncCallback.VoidCallback() {
  36. @Override
  37. public void processResult(int rc, String path, Object ctx) {
  38. System.out.println("ResultCode: " + rc);
  39. System.out.println("Znode: " + path);
  40. System.out.println("Context: " + (String)ctx);
  41. }
  42. },
  43. "The Context"
  44. );
  45.  
  46. zk.close();
  47. }
  48.  
  49. }

四、获取子节点列表

1. 使用同步API获取子节点列表

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.List;
  4. import java.util.concurrent.CountDownLatch;
  5.  
  6. import org.apache.zookeeper.CreateMode;
  7. import org.apache.zookeeper.KeeperException;
  8. import org.apache.zookeeper.WatchedEvent;
  9. import org.apache.zookeeper.Watcher;
  10. import org.apache.zookeeper.ZooKeeper;
  11. import org.apache.zookeeper.Watcher.Event.EventType;
  12. import org.apache.zookeeper.Watcher.Event.KeeperState;
  13. import org.apache.zookeeper.ZooDefs.Ids;
  14. import org.apache.zookeeper.data.Stat;
  15.  
  16. /**
  17. * 使用同步API获取子节点列表
  18. * @author huey
  19. * @version 1.0
  20. * @created 2015-3-1
  21. */
  22. public class ZKDemo {
  23.  
  24. public static void main(String[] args) throws Exception {
  25.  
  26. final CountDownLatch connectedSignal = new CountDownLatch(1);
  27. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, null);
  28. zk.register(new Watcher() {
  29. @Override
  30. public void process(WatchedEvent event) {
  31. if (event.getState() == KeeperState.SyncConnected) {
  32. if (event.getType() == EventType.None
  33. && event.getPath() == null) {
  34. connectedSignal.countDown();
  35. } else if (event.getType() == EventType.NodeChildrenChanged) {
  36. try {
  37. System.out.println("NodeChildrenChanged.");
  38. List<String> children = zk.getChildren(event.getPath(), true);
  39. System.out.println("Children: " + children);
  40. } catch (KeeperException e) {
  41. e.printStackTrace();
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. }
  48. });
  49. connectedSignal.await();
  50.  
  51. zk.create("/zk-huey", "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  52. zk.create("/zk-huey/node1", "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  53. zk.create("/zk-huey/node2", "node2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  54.  
  55. Stat stat = new Stat();
  56. List<String> children = zk.getChildren("/zk-huey",
  57. true, // 注册默认的Watcher,当子节点类别发送变更的话,向客户端发送通知
  58. stat // 用于描述节点状态信息
  59. );
  60. System.out.println("Stat: " + stat);
  61. System.out.println("Children: " + children);
  62.  
  63. zk.create("/zk-huey/node3", "node3".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  64.  
  65. Thread.sleep(10 * 1000);
  66. zk.close();
  67. }
  68.  
  69. }

结果输出:

  1. Stat: 4294967436,4294967436,1425201236879,1425201236879,0,2,0,0,4,2,4294967438
  2.  
  3. Children: [node2, node1]
  4. NodeChildrenChanged.
  5. State: CONNECTED
  6. Children: [node2, node3, node1]

2. 使用异步API获取子节点列表

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.List;
  4. import java.util.concurrent.CountDownLatch;
  5.  
  6. import org.apache.zookeeper.AsyncCallback;
  7. import org.apache.zookeeper.CreateMode;
  8. import org.apache.zookeeper.KeeperException;
  9. import org.apache.zookeeper.WatchedEvent;
  10. import org.apache.zookeeper.Watcher;
  11. import org.apache.zookeeper.ZooKeeper;
  12. import org.apache.zookeeper.Watcher.Event.EventType;
  13. import org.apache.zookeeper.Watcher.Event.KeeperState;
  14. import org.apache.zookeeper.ZooDefs.Ids;
  15. import org.apache.zookeeper.data.Stat;
  16.  
  17. /**
  18. * 使用异步API获取子节点列表
  19. * @author huey
  20. * @version 1.0
  21. * @created 2015-3-1
  22. */
  23. public class ZKDemo {
  24.  
  25. public static void main(String[] args) throws Exception {
  26.  
  27. final CountDownLatch connectedSignal = new CountDownLatch(1);
  28. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, null);
  29. zk.register(new Watcher() {
  30. @Override
  31. public void process(WatchedEvent event) {
  32. if (event.getState() == KeeperState.SyncConnected) {
  33. if (event.getType() == EventType.None
  34. && event.getPath() == null) {
  35. connectedSignal.countDown();
  36. } else if (event.getType() == EventType.NodeChildrenChanged) {
  37. try {
  38. System.out.println("NodeChildrenChanged.");
  39. List<String> children = zk.getChildren(event.getPath(), true);
  40. System.out.println("Children: " + children);
  41. } catch (KeeperException e) {
  42. e.printStackTrace();
  43. } catch (InterruptedException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. }
  48. }
  49. });
  50. connectedSignal.await();
  51.  
  52. zk.create("/zk-huey", "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  53. zk.create("/zk-huey/node1", "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  54. zk.create("/zk-huey/node2", "node2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  55.  
  56. zk.getChildren("/zk-huey",
  57. true,
  58. new AsyncCallback.Children2Callback() {
  59. @Override
  60. public void processResult(int rc, String path, Object ctx,
  61. List<String> children, Stat stat) {
  62. System.out.println("ResultCode: " + rc);
  63. System.out.println("ZNode: " + path);
  64. System.out.println("Context: " + ctx);
  65. System.out.println("Children: " + children);
  66. System.out.println("Stat: " + stat);
  67. }
  68. },
  69. "The Context"
  70. );
  71.  
  72. zk.create("/zk-huey/node3", "node3".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  73.  
  74. Thread.sleep(10 * 1000);
  75. zk.close();
  76. }
  77.  
  78. }

五、获取节点数据内容

1. 使用同步API获取节点数据内容

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.CreateMode;
  6. import org.apache.zookeeper.WatchedEvent;
  7. import org.apache.zookeeper.Watcher;
  8. import org.apache.zookeeper.ZooKeeper;
  9. import org.apache.zookeeper.Watcher.Event.EventType;
  10. import org.apache.zookeeper.Watcher.Event.KeeperState;
  11. import org.apache.zookeeper.ZooDefs.Ids;
  12.  
  13. /**
  14. * 使用同步API获取节点数据内容
  15. * @author huey
  16. * @version 1.0
  17. * @created 2015-3-1
  18. */
  19. public class ZKDemo {
  20.  
  21. public static void main(String[] args) throws Exception {
  22.  
  23. final CountDownLatch connectedSignal = new CountDownLatch(1);
  24. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  25. @Override
  26. public void process(WatchedEvent event) {
  27. if (event.getState() == KeeperState.SyncConnected) {
  28. if (event.getType() == EventType.None
  29. && event.getPath() == null) {
  30. connectedSignal.countDown();
  31. }
  32. }
  33. }
  34. });
  35. connectedSignal.await();
  36.  
  37. zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  38. byte[] nodeData = zk.getData("/zk-huey", false, null);
  39. System.out.println("NodeData: " + new String(nodeData));
  40.  
  41. zk.close();
  42. }
  43.  
  44. }

2. 使用异步API获取节点数据内容

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.AsyncCallback;
  6. import org.apache.zookeeper.CreateMode;
  7. import org.apache.zookeeper.WatchedEvent;
  8. import org.apache.zookeeper.Watcher;
  9. import org.apache.zookeeper.ZooKeeper;
  10. import org.apache.zookeeper.Watcher.Event.EventType;
  11. import org.apache.zookeeper.Watcher.Event.KeeperState;
  12. import org.apache.zookeeper.ZooDefs.Ids;
  13. import org.apache.zookeeper.data.Stat;
  14.  
  15. /**
  16. * 使用异步API获取节点数据内容
  17. * @author huey
  18. * @version 1.0
  19. * @created 2015-3-1
  20. */
  21. public class ZKDemo {
  22.  
  23. public static void main(String[] args) throws Exception {
  24.  
  25. final CountDownLatch connectedSignal = new CountDownLatch(1);
  26. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  27. @Override
  28. public void process(WatchedEvent event) {
  29. if (event.getState() == KeeperState.SyncConnected) {
  30. if (event.getType() == EventType.None
  31. && event.getPath() == null) {
  32. connectedSignal.countDown();
  33. }
  34. }
  35. }
  36. });
  37. connectedSignal.await();
  38.  
  39. zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  40. zk.getData(
  41. "/zk-huey",
  42. false,
  43. new AsyncCallback.DataCallback() {
  44. @Override
  45. public void processResult(int rc, String path, Object ctx, byte[] data,
  46. Stat stat) {
  47. System.out.println("ResultCode: " + rc);
  48. System.out.println("ZNode: " + path);
  49. System.out.println("Context: " + ctx);
  50. System.out.println("NodeData: " + new String(data));
  51. System.out.println("Stat: " + stat);
  52. }
  53. },
  54. "The Context"
  55. );
  56.  
  57. zk.close();
  58. }
  59.  
  60. }

六、更新数据

1. 使用同步API更新节点数据内容

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.CreateMode;
  6. import org.apache.zookeeper.WatchedEvent;
  7. import org.apache.zookeeper.Watcher;
  8. import org.apache.zookeeper.ZooKeeper;
  9. import org.apache.zookeeper.Watcher.Event.EventType;
  10. import org.apache.zookeeper.Watcher.Event.KeeperState;
  11. import org.apache.zookeeper.ZooDefs.Ids;
  12.  
  13. /**
  14. * 使用同步API更新节点数据内容
  15. * @author huey
  16. * @version 1.0
  17. * @created 2015-3-1
  18. */
  19. public class ZKDemo {
  20.  
  21. public static void main(String[] args) throws Exception {
  22.  
  23. final CountDownLatch connectedSignal = new CountDownLatch(1);
  24. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  25. @Override
  26. public void process(WatchedEvent event) {
  27. if (event.getState() == KeeperState.SyncConnected) {
  28. if (event.getType() == EventType.None
  29. && event.getPath() == null) {
  30. connectedSignal.countDown();
  31. }
  32. }
  33. }
  34. });
  35. connectedSignal.await();
  36.  
  37. zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  38. byte[] nodeData = zk.getData("/zk-huey", false, null);
  39. System.out.println("NodeData: " + nodeData);
  40.  
  41. zk.setData("/zk-huey", "world".getBytes(), -1);
  42. nodeData = zk.getData("/zk-huey", false, null);
  43. System.out.println("NodeData: " + nodeData);
  44.  
  45. zk.close();
  46. }
  47.  
  48. }

2. 使用异步API更新节点数据内容

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.AsyncCallback;
  6. import org.apache.zookeeper.CreateMode;
  7. import org.apache.zookeeper.WatchedEvent;
  8. import org.apache.zookeeper.Watcher;
  9. import org.apache.zookeeper.ZooKeeper;
  10. import org.apache.zookeeper.Watcher.Event.EventType;
  11. import org.apache.zookeeper.Watcher.Event.KeeperState;
  12. import org.apache.zookeeper.ZooDefs.Ids;
  13. import org.apache.zookeeper.data.Stat;
  14.  
  15. /**
  16. * 使用异步API更新节点数据内容
  17. * @author huey
  18. * @version 1.0
  19. * @created 2015-3-1
  20. */
  21. public class ZKDemo {
  22.  
  23. public static void main(String[] args) throws Exception {
  24.  
  25. final CountDownLatch connectedSignal = new CountDownLatch(1);
  26. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  27. @Override
  28. public void process(WatchedEvent event) {
  29. if (event.getState() == KeeperState.SyncConnected) {
  30. if (event.getType() == EventType.None
  31. && event.getPath() == null) {
  32. connectedSignal.countDown();
  33. }
  34. }
  35. }
  36. });
  37. connectedSignal.await();
  38.  
  39. zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  40. byte[] nodeData = zk.getData("/zk-huey", false, null);
  41. System.out.println("NodeData: " + nodeData);
  42.  
  43. zk.setData(
  44. "/zk-huey",
  45. "world".getBytes(),
  46. -1,
  47. new AsyncCallback.StatCallback() {
  48. @Override
  49. public void processResult(int rc, String path, Object ctx, Stat stat) {
  50. System.out.println("ResultCode: " + rc);
  51. System.out.println("ZNode: " + path);
  52. System.out.println("Context: " + ctx);
  53. System.out.println("Stat: " + stat);
  54. }
  55. },
  56. "The Context"
  57. );
  58.  
  59. zk.close();
  60. }
  61.  
  62. }

七、判断节点是否存在

1. 使用同步API判断节点是否存在

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.AsyncCallback;
  6. import org.apache.zookeeper.CreateMode;
  7. import org.apache.zookeeper.WatchedEvent;
  8. import org.apache.zookeeper.Watcher;
  9. import org.apache.zookeeper.ZooKeeper;
  10. import org.apache.zookeeper.Watcher.Event.EventType;
  11. import org.apache.zookeeper.Watcher.Event.KeeperState;
  12. import org.apache.zookeeper.ZooDefs.Ids;
  13. import org.apache.zookeeper.data.Stat;
  14.  
  15. /**
  16. * 使用同步API判断节点是否存在
  17. * @author huey
  18. * @version 1.0
  19. * @created 2015-3-1
  20. */
  21. public class ZKDemo {
  22.  
  23. public static void main(String[] args) throws Exception {
  24.  
  25. final CountDownLatch connectedSignal = new CountDownLatch(1);
  26. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  27. @Override
  28. public void process(WatchedEvent event) {
  29. if (event.getState() == KeeperState.SyncConnected) {
  30. if (event.getType() == EventType.None
  31. && event.getPath() == null) {
  32. connectedSignal.countDown();
  33. }
  34. }
  35. }
  36. });
  37. connectedSignal.await();
  38.  
  39. Stat stat = zk.exists("/zk-huey", false);
  40. if (stat == null) {
  41. zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  42. } else {
  43. System.out.println("Stat: " + stat);
  44. }
  45.  
  46. zk.close();
  47. }
  48.  
  49. }

2. 使用异步API判断节点是否存在

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.AsyncCallback;
  6. import org.apache.zookeeper.WatchedEvent;
  7. import org.apache.zookeeper.Watcher;
  8. import org.apache.zookeeper.ZooKeeper;
  9. import org.apache.zookeeper.Watcher.Event.EventType;
  10. import org.apache.zookeeper.Watcher.Event.KeeperState;
  11. import org.apache.zookeeper.data.Stat;
  12.  
  13. /**
  14. * 使用异步API判断节点是否存在
  15. * @author huey
  16. * @version 1.0
  17. * @created 2015-3-1
  18. */
  19. public class ZKDemo {
  20.  
  21. public static void main(String[] args) throws Exception {
  22.  
  23. final CountDownLatch connectedSignal = new CountDownLatch(1);
  24. final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  25. @Override
  26. public void process(WatchedEvent event) {
  27. if (event.getState() == KeeperState.SyncConnected) {
  28. if (event.getType() == EventType.None
  29. && event.getPath() == null) {
  30. connectedSignal.countDown();
  31. }
  32. }
  33. }
  34. });
  35. connectedSignal.await();
  36.  
  37. zk.exists(
  38. "/zk-huey",
  39. false,
  40. new AsyncCallback.StatCallback() {
  41. @Override
  42. public void processResult(int rc, String path, Object ctx, Stat stat) {
  43. System.out.println("ResultCode: " + rc);
  44. System.out.println("ZNode: " + path);
  45. System.out.println("Context: " + ctx);
  46. System.out.println("Stat: " + stat);
  47. }
  48. },
  49. "The Context"
  50. );
  51.  
  52. zk.close();
  53. }
  54.  
  55. }

八、权限控制

  1. package com.huey.dream.demo;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4.  
  5. import org.apache.zookeeper.CreateMode;
  6. import org.apache.zookeeper.WatchedEvent;
  7. import org.apache.zookeeper.Watcher;
  8. import org.apache.zookeeper.ZooKeeper;
  9. import org.apache.zookeeper.ZooDefs.Ids;
  10.  
  11. /**
  12. * ZooKeeper权限控制
  13. * @author huey
  14. * @version 1.0
  15. * @created 2015-3-1
  16. */
  17. public class ZKDemo {
  18.  
  19. public static void main(String[] args) throws Exception {
  20.  
  21. /**
  22. * 使用含有权限信息的zookeeper会话创建数据节点
  23. */
  24. final CountDownLatch connectedSignal = new CountDownLatch(1);
  25. ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  26. @Override
  27. public void process(WatchedEvent event) {
  28. connectedSignal.countDown();
  29. }
  30. });
  31. connectedSignal.await();
  32. zk.addAuthInfo("digest", "huey:123".getBytes());
  33. zk.create("/zk-huey", "hello".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
  34. zk.close();
  35.  
  36. /**
  37. * 使用无权限信息的zookeeper会话访问含有权限信息的数据节点
  38. */
  39. try {
  40. final CountDownLatch signal = new CountDownLatch(1);
  41. ZooKeeper zk1 = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  42. @Override
  43. public void process(WatchedEvent event) {
  44. signal.countDown();
  45. }
  46. });
  47. signal.await();
  48. zk1.getData("/zk-huey", false, null);
  49. System.out.println("NodeData: " + new String(zk1.getData("/zk-huey", false, null)));
  50. zk1.close();
  51. } catch (Exception e) {
  52. System.out.println("Failed to delete Znode: " + e.getMessage());
  53. }
  54.  
  55. /**
  56. * 使用错误权限信息的zookeeper会话访问含有权限信息的数据节点
  57. */
  58. try {
  59. final CountDownLatch signal = new CountDownLatch(1);
  60. ZooKeeper zk2 = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  61. @Override
  62. public void process(WatchedEvent event) {
  63. signal.countDown();
  64. }
  65. });
  66. signal.await();
  67. zk2.addAuthInfo("digest", "huey:abc".getBytes());
  68. System.out.println("NodeData: " + new String(zk2.getData("/zk-huey", false, null)));
  69. zk2.close();
  70. } catch (Exception e) {
  71. System.out.println("Failed to delete Znode: " + e.getMessage());
  72. }
  73.  
  74. /**
  75. * 使用正确权限信息的zookeeper会话访问含有权限信息的数据节点
  76. */
  77. try {
  78. final CountDownLatch signal = new CountDownLatch(1);
  79. ZooKeeper zk3 = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {
  80. @Override
  81. public void process(WatchedEvent event) {
  82. signal.countDown();
  83. }
  84. });
  85. signal.await();
  86. zk3.addAuthInfo("digest", "huey:123".getBytes());
  87. System.out.println("NodeData: " + new String(zk3.getData("/zk-huey", false, null)));
  88. zk3.close();
  89. } catch (Exception e) {
  90. System.out.println("Failed to delete Znode: " + e.getMessage());
  91. }
  92. }
  93.  
  94. }

结果输出:

  1. Failed to delete Znode: KeeperErrorCode = NoAuth for /zk-huey
  2. Failed to delete Znode: KeeperErrorCode = NoAuth for /zk-huey
  3. NodeData: hello

ZooKeeper(3.4.5) - 原生 API 的简单示例的更多相关文章

  1. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  2. 玩转nodeJS系列:使用原生API实现简单灵活高效的路由功能(支持nodeJs单机集群),nodeJS本就应该这样轻快

    前言: 使用nodeJS原生API实现快速灵活路由,方便与其他库/框架进行整合: 1.原生API,简洁高效的轻度封装,加速路由解析,nodeJS本就应该这样轻快 2.不包含任何第三方库/框架,可以灵活 ...

  3. Google字体API使用简单示例

    一.前面的话 Google总会做些造福大众的事情,例如提供了web在线字体的API,这玩意其实去年就有了,但是字体种类手指头+脚趾头就可以数出来.but 最近,貌似Google对字体API进行了升级, ...

  4. ASP.NET Web API 的简单示例

    Demo1: HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  5. 【Redis】三、Redis安装及简单示例

    (四)Redis安装及使用   Redis的安装比较简单,仍然和大多数的Apache开源软件一样,只需要下载,解压,配置环境变量即可.具体安装过程参考:菜鸟教程Redis安装.   安装完成后,通过r ...

  6. curator框架的使用以及实现分布式锁等应用与zkclient操作zookeeper,简化复杂原生API

    打开zookeeper集群 先体会一下原生API有多麻烦(可略过): //地址 static final String ADDR = "192.168.171.128:2181,192.16 ...

  7. (原) 2.1 Zookeeper原生API使用

    本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...

  8. Zookeeper系列2 原生API 以及核心特性watcher

    原生API 增删改查询 public class ZkBaseTest { static final String CONNECT_ADDR = "192.168.0.120"; ...

  9. Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话

    一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...

随机推荐

  1. UVaLive 7362 Farey (数学,欧拉函数)

    题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然A ...

  2. 【JDBC】预编译SQL与防注入式攻击

    在JDBC编程中,常用Statement.PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedS ...

  3. MT4平台上mql4实现的基于macd指标的智能交易EA

    屌丝命苦,拼爹拼不过,拼后台没有,技术宅一枚,情商有问题,不会见人说人话见鬼说鬼话,所以在国庆熬着混着,工作也没啥大起色,想想就郁闷,难不成一辈子就只能这样了? 苦思冥想,想得一条路,那就是程序化交易 ...

  4. 使用Github遇到的问题及解决办法

    问题一: 当push代码上去仓库时,出现 ! [rejected]        master -> master (fetch first) error: failed to push som ...

  5. 十,选择cfee编辑器并学会调试程序。以及结束语。

    为什么推荐用cfree呢?因为我认为这个编辑器界面友好,用起来方便. 你也许会问,调试程序是什么? 那么下面思考几个问题:对于前面讲的分支结构和循环结构有点不懂怎么办?如果写的程序语法没有错误但是运算 ...

  6. Tomcat7中配置Oracle 11g数据库DBCP连接池

    将       ojdbc6.jar       tomcat-jdbc-7.0.37.jar            拷贝到工程的WEB-INF\lib  下面 一.在Tomcat的配置文件Tomca ...

  7. C# - DynamicObject with Dynamic

    本文转载:http://joe-bq-wang.iteye.com/blog/1872756 里面有动态Linq to xml的写法. There is a expando object which ...

  8. Cocos2d-x——支持多触点

    1:在AppController的didFinishLaunchingWithOptions中,加入 [__glView setMultipleTouchEnabled:YES]; 2:在CCLaye ...

  9. MEF 编程指南(十一):查询 CompositionContainer

    CompositionContainer 公开了一部分获取导出.导出对象以及两者集合的重载.   在这些方法重载中,你应该遵循下面的共享行为准则 - 除非特别说明.   当请求单一实例的时候,如果没发 ...

  10. Hadoop on Mac with IntelliJ IDEA - 4 制作jar包

    本文讲述使用IntelliJ IDEA打包Project的过程,即,打jar包. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hado ...