04.ZooKeeper的Java工具包

依赖配置

常用方法

示例代码(CRUD)

  1. public class SimpleZkClient {
  2. //需要和ZooKeeper中配置的名称相同
  3. private static final String connectString = "mini1:2181,mini2:2181,mini3:2181";
  4. private static final int sessionTimeout = 2000;
  5. private ZooKeeper zkClient = null;
  6. @Before
  7. public void init() throws Exception {
  8. zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
  9. @Override
  10. public void process(WatchedEvent event) {
  11. // 收到事件通知后的回调函数(应该是我们自己的事件处理逻辑)
  12. System.out.println(event.getType() + "---" + event.getPath());
  13. try {
  14. //设置监听,该监听只会被回调一次,
  15. zkClient.getChildren("/", true);
  16. } catch (Exception e) {
  17. //...
  18. }
  19. }
  20. });
  21. }
  22. /**
  23. * 数据的增删改查
  24. *
  25. * @throws InterruptedException
  26. * @throws KeeperException
  27. */
  28. // 创建数据节点到zk中
  29. public void testCreate() throws KeeperException, InterruptedException {
  30. // 参数1:要创建的节点的路径 参数2:节点大数据 参数3:节点的权限 参数4:节点的类型
  31. String nodeCreated = zkClient.create("/eclipse", "hellozk".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  32. //上传的数据可以是任何类型,但都要转成byte[]
  33. }
  34. //判断znode是否存在
  35. @Test
  36. public void testExist() throws Exception{
  37. Stat stat = zkClient.exists("/eclipse", false);
  38. System.out.println(stat==null?"not exist":"exist");
  39. }
  40. //获取znode的数据
  41. @Test
  42. public void getData() throws Exception {
  43. byte[] data = zkClient.getData("/eclipse", false, null);
  44. System.out.println(new String(data));
  45. }
  46. // 获取子节点
  47. @Test
  48. public void getChildren() throws Exception {
  49. List<String> children = zkClient.getChildren("/", true);
  50. for (String child : children) {
  51. System.out.println(child);
  52. }
  53. //Zookeeper的监听线程为守护线程,当主线程结束后,该子线程也会结束,程序退出
  54. Thread.sleep(Long.MAX_VALUE);
  55. }
  56. //删除znode
  57. @Test
  58. public void deleteZnode() throws Exception {
  59. //参数2:指定要删除的版本,-1表示删除所有版本
  60. zkClient.delete("/eclipse", -1);
  61. }
  62. //删除znode
  63. @Test
  64. public void setData() throws Exception {
  65. zkClient.setData("/app1", "imissyou angelababy".getBytes(), -1);
  66. byte[] data = zkClient.getData("/app1", false, null);
  67. System.out.println(new String(data));
  68. }
  69. }

注意点

  • ZK注册的监听只会被回调一次,因此需要在监听回调方法中再次设置监听
  • ZK的监听线程为守护线程,当主线程运行结束后,该监听线程也会结束,程序退出
posted @ 2017-03-10 21:46  Wesly186  阅读(759)  评论(0编辑  收藏  举报