{"id":835,"date":"2018-07-20T08:41:16","date_gmt":"2018-07-20T00:41:16","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=835"},"modified":"2018-07-20T08:41:16","modified_gmt":"2018-07-20T00:41:16","slug":"%e3%80%90%e5%88%86%e5%b8%83%e5%bc%8f%e3%80%91zookeeper%e4%bd%bf%e7%94%a8-java-api","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=835","title":{"rendered":"\u3010\u5206\u5e03\u5f0f\u3011Zookeeper\u4f7f\u7528&#8211;Java API"},"content":{"rendered":"<p><strong>\u4e00\u3001\u524d\u8a00<\/strong><\/p>\n<p>\u4e0a\u4e00\u7bc7\u535a\u5ba2\u6211\u4eec\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u64cd\u4f5cZookeper\u7684\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u5e76\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\uff0c\u8fd9\u7bc7\u4e3b\u8981\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7API\uff08JAVA\uff09\u6765\u64cd\u4f5cZookeeper\u3002<\/p>\n<p><strong>\u4e8c\u3001\u5f00\u53d1\u73af\u5883\u914d\u7f6e<\/strong><\/p>\n<p>\u9996\u5148\u6253\u5f00Zookeeper\u670d\u52a1\u7aef\uff08\u4e0a\u4e00\u7bc7\u535a\u5ba2\u6709\u5177\u4f53\u7684\u65b9\u6cd5\uff09\uff0c\u65b9\u4fbf\u5ba2\u6237\u7aef\u8fde\u63a5\u3002<\/p>\n<p>\u914d\u7f6e\u5f00\u53d1\u73af\u5883\u73af\u5883\u53ef\u4ee5\u6709\u4e24\u79cd\u65b9\u5f0f\uff1a\u2460 \u76f4\u63a5\u4e0b\u8f7d\u76f8\u5173\u7684\u4f9d\u8d56Jar\u5305\uff0c\u7136\u540e\u5728IDE\u4e2d\u6dfb\u52a0\u4f9d\u8d56 \u2461 \u5efa\u7acbmaven\u9879\u76ee\uff0c\u4f7f\u7528maven\u8fdb\u884c\u4f9d\u8d56\u7ba1\u7406\u3002<\/p>\n<p>\u2460 \u624b\u52a8\u6dfb\u52a0\u4f9d\u8d56\u81f3IDE<\/p>\n<p><strong>\u6b65\u9aa4\u4e00\uff1a<\/strong>\u70b9\u51fb<a href=\"http:\/\/search.maven.org\/#search%7Cgav%7C1%7Cg%3A%22org.apache.zookeeper%22%20AND%20a%3A%22zookeeper%22\" target=\"_blank\" rel=\"noopener\">\u8fd9\u91cc<\/a>\u4e0b\u8f7d\u5bf9\u5e94\u7248\u672c\u7684Jar\u5305\uff0c\u5305\u62ec\uff08jar\u3001javadoc.jar\u3001sources.jar\uff09\uff0c\u7b14\u8005\u5bf9\u5e94\u4e0b\u8f7d\u7684Zookeeper3.4.6\u7248\u672c\u3002<\/p>\n<p><strong>\u6b65\u9aa4\u4e8c\uff1a<\/strong>\u6253\u5f00IDE\uff08\u7b14\u8005\u4f7f\u7528eclispe\uff09\uff0c\u65b0\u5efa\u540d\u4e3azookeeper_examples_none_maven\u7684java\u9879\u76ee\u3002\u7531\u4e8e\u9700\u8981\u5355\u72ec\u6dfb\u52a0\u4f9d\u8d56\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7ba1\u7406\uff0c\u7b14\u8005\u5728\u9879\u76ee\u4e0b\u65b0\u5efa\u4e86jar\u6587\u4ef6\u5939\uff0c\u7528\u4e8e\u5b58\u653e\u672c\u9879\u76ee\u7684jar\u5305\uff08\u5c06\u6b65\u9aa4\u4e00\u4e0b\u8f7d\u76843\u4e2ajar\u5305\u5b58\u653e\u81f3\u6b64\u6587\u4ef6\u5939\u4e0b\uff09\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images2015.cnblogs.com\/blog\/616953\/201611\/616953-20161104144511893-1705189224.png\" alt=\"\" width=\"659\" height=\"126\" \/><\/p>\n<p><strong>\u6b65\u9aa4\u4e09\uff1a<\/strong>\u5728eclipse\u4e2d\u6dfb\u52a0\u4f9d\u8d56<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images2015.cnblogs.com\/blog\/616953\/201611\/616953-20161103214427658-921399604.png\" alt=\"\" width=\"658\" height=\"517\" \/><\/p>\n<p><strong>\u6b65\u9aa4\u56db\uff1a<\/strong>\u65b0\u5efa\u5305\u3001Java\u7c7b\u8fdb\u884c\u6d4b\u8bd5<\/p>\n<p>Zookeeper_Constructor_Usage_Simple.java<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_7d841655-db79-4b0c-9ce7-1d67a607a9dd\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_7d841655-db79-4b0c-9ce7-1d67a607a9dd\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.io.IOException;\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooKeeper;\n\npublic class Zookeeper_Constructor_Usage_Simple implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n\n    @Override\n    public void process(WatchedEvent event) {\n        System.out.println(\"Receive watched event : \" + event);\n        if (KeeperState.SyncConnected == event.getState()) {\n            connectedSemaphore.countDown();\n        }\n    }\n\n    public static void main(String[] args) throws IOException {\n        ZooKeeper zookeeper = new ZooKeeper(\"127.0.0.1:2181\", 5000, new Zookeeper_Constructor_Usage_Simple());\n        System.out.println(zookeeper.getState());\n        try {\n            connectedSemaphore.await();\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n        System.out.println(\"Zookeeper session established\");\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>Exception in thread \"main\" java.lang.NoClassDefFoundError: org\/slf4j\/LoggerFactory\n    at org.apache.zookeeper.ZooKeeper.&lt;clinit&gt;(ZooKeeper.java:94)\n    at com.hust.grid.leesf.examples.Zookeeper_Constructor_Usage_Simple.main(Zookeeper_Constructor_Usage_Simple.java:23)\nCaused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory\n    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)\n    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)\n    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)\n    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)\n    ... 2 more<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u7f3a\u5931LoggerFactory\u7c7b\uff0c\u7ecf\u7b14\u8005\u67e5\u9605\u8d44\u6599\uff0c\u53ea\u9700\u5c06zookeeper\u7684lib\u6587\u4ef6\u5939\u4e0blog4j-1.2.16.jar\u3001slf4j-api-1.6.1.jar\u653e\u5982zookeeper_examples_none_maven\u7684jar\u6587\u4ef6\u5939\u4e0b\uff0c\u7136\u540e\u518d\u6b21\u5c06\u5176\u6dfb\u52a0\u81f3IDE\u5373\u53ef\u3002<\/p>\n<p>\u518d\u6b21\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>CONNECTING\nReceive watched event : WatchedEvent state:SyncConnected type:None path:null\nZookeeper session established<\/pre>\n<\/div>\n<p>\u8868\u793a\u5ba2\u6237\u7aef\u5df2\u7ecf\u6210\u529f\u8fde\u63a5\u81f3\u670d\u52a1\u5668\u4e86\u3002<\/p>\n<p>\u53ef\u4ee5\u770b\u5230\u65b9\u6cd5\u4e00\u76f8\u5bf9\u800c\u8a00\u6bd4\u8f83\u9ebb\u70e6\uff0c\u9700\u8981\u624b\u52a8\u7ba1\u7406\u4e0d\u540c\u7684\u4f9d\u8d56jar\u5305\uff0c\u53ef\u4ee5\u91c7\u7528\u66f4\u6210\u719f\u7684\u4f9d\u8d56\u7ba1\u7406\u65b9\u6cd5\uff0c\u5373\u4f7f\u7528maven\u6765\u7ba1\u7406Jar\u5305\u3002<\/p>\n<p>\u2461 \u4f7f\u7528maven\u7ba1\u7406\u4f9d\u8d56<\/p>\n<p><strong>\u6b65\u9aa4\u4e00\uff1a<\/strong>\u65b0\u5efamaven\u9879\u76ee<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2015.cnblogs.com\/blog\/616953\/201611\/616953-20161103215228986-1623829740.png\" alt=\"\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images2015.cnblogs.com\/blog\/616953\/201611\/616953-20161103215241549-1778621628.png\" alt=\"\" width=\"701\" height=\"640\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images2015.cnblogs.com\/blog\/616953\/201611\/616953-20161103215250596-2101433157.png\" alt=\"\" width=\"702\" height=\"632\" \/><\/p>\n<p><strong>\u6b65\u9aa4\u4e8c\uff1a<\/strong>\u914d\u7f6epom.xml\u6587\u4ef6\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_ffd3c2d7-92da-4c04-a25b-88d9c6b8e6fa\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_ffd3c2d7-92da-4c04-a25b-88d9c6b8e6fa\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n  xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\n  &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n  &lt;groupId&gt;com.hust.grid.leesf&lt;\/groupId&gt;\n  &lt;artifactId&gt;zookeeper_examples&lt;\/artifactId&gt;\n  &lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\n  &lt;packaging&gt;jar&lt;\/packaging&gt;\n\n  &lt;name&gt;zookeeper_examples&lt;\/name&gt;\n  &lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;\n\n  &lt;properties&gt;\n    &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\n  &lt;\/properties&gt;\n\n  &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;junit&lt;\/groupId&gt;\n            &lt;artifactId&gt;junit&lt;\/artifactId&gt;\n            &lt;version&gt;3.8.1&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.apache.zookeeper\/zookeeper --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.apache.zookeeper&lt;\/groupId&gt;\n            &lt;artifactId&gt;zookeeper&lt;\/artifactId&gt;\n            &lt;version&gt;3.4.6&lt;\/version&gt;\n        &lt;\/dependency&gt;\n\n        &lt;!-- https:\/\/mvnrepository.com\/artifact\/log4j\/log4j --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;log4j&lt;\/groupId&gt;\n            &lt;artifactId&gt;log4j&lt;\/artifactId&gt;\n            &lt;version&gt;1.2.16&lt;\/version&gt;\n        &lt;\/dependency&gt;\n        &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.slf4j\/slf4j-api --&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.slf4j&lt;\/groupId&gt;\n            &lt;artifactId&gt;slf4j-api&lt;\/artifactId&gt;\n            &lt;version&gt;1.6.1&lt;\/version&gt;\n        &lt;\/dependency&gt;\n\n    &lt;\/dependencies&gt;\n&lt;\/project&gt;<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p><strong>\u6b65\u9aa4\u4e09\uff1a<\/strong>\u65b0\u5efajava\u7c7b\u8fdb\u884c\u6d4b\u8bd5<\/p>\n<p>Zookeeper_Constructor_Usage_Simple.java\uff0c\u4ee3\u7801\u540c\u4e0a\u3002<\/p>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>CONNECTING\nReceive watched event : WatchedEvent state:SyncConnected type:None path:null\nZookeeper session established<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u4e5f\u8868\u793a\u5ba2\u6237\u7aef\u5df2\u7ecf\u6210\u529f\u8fde\u63a5\u81f3\u670d\u52a1\u5668\u3002<\/p>\n<p><strong>\u4e09\u3001\u64cd\u4f5c\u793a\u4f8b<\/strong><\/p>\n<p>3.1 \u00a0\u521b\u5efa\u8282\u70b9<\/p>\n<p>\u521b\u5efa\u8282\u70b9\u6709\u5f02\u6b65\u548c\u540c\u6b65\u4e24\u79cd\u65b9\u5f0f\u3002\u65e0\u8bba\u662f\u5f02\u6b65\u6216\u8005\u540c\u6b65\uff0cZookeeper\u90fd\u4e0d\u652f\u6301\u9012\u5f52\u8c03\u7528\uff0c\u5373<strong>\u65e0\u6cd5\u5728\u7236\u8282\u70b9\u4e0d\u5b58\u5728\u7684\u60c5\u51b5\u4e0b\u521b\u5efa\u4e00\u4e2a\u5b50\u8282\u70b9\uff0c\u5982\u5728\/zk-ephemeral\u8282\u70b9\u4e0d\u5b58\u5728\u7684\u60c5\u51b5\u4e0b\u521b\u5efa\/zk-ephemeral\/ch1\u8282\u70b9<\/strong>\uff1b\u5e76\u4e14\u5982\u679c\u4e00\u4e2a\u8282\u70b9\u5df2\u7ecf\u5b58\u5728\uff0c\u90a3\u4e48\u521b\u5efa\u540c\u540d\u8282\u70b9\u65f6\uff0c\u4f1a\u629b\u51faNodeExistsException\u5f02\u5e38\u3002<\/p>\n<p>\u2460 \u540c\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_7fbf4522-9437-40c8-915c-cbf04ee8d61f\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_7fbf4522-9437-40c8-915c-cbf04ee8d61f\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\n\npublic class Zookeeper_Create_API_Sync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n\n    public static void main(String[] args) throws Exception {\n        ZooKeeper zookeeper = new ZooKeeper(\"127.0.0.1:2181\", 5000, new Zookeeper_Create_API_Sync_Usage());\n        System.out.println(zookeeper.getState());\n        connectedSemaphore.await();\n\n        String path1 = zookeeper.create(\"\/zk-test-ephemeral-\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"Success create znode: \" + path1);\n\n        String path2 = zookeeper.create(\"\/zk-test-ephemeral-\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);\n        System.out.println(\"Success create znode: \" + path2);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            connectedSemaphore.countDown();\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>CONNECTING\nSuccess create znode: \/zk-test-ephemeral-\nSuccess create znode: \/zk-test-ephemeral-0000000043<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u5df2\u7ecf\u6210\u529f\u521b\u5efa\u4e86\u4e34\u65f6\u8282\u70b9\u548c\u4e34\u65f6\u987a\u5e8f\u8282\u70b9\uff0c\u5728\u521b\u5efa\u987a\u5e8f\u8282\u70b9\u65f6\uff0c\u7cfb\u7edf\u4f1a\u5728\u540e\u9762\u81ea\u52a8\u589e\u52a0\u4e00\u4e32\u6570\u5b57\u3002<\/p>\n<p>\u2461 \u5f02\u6b65\u65b9\u5f0f<\/p>\n<p>\u4f7f\u7528\u5f02\u6b65\u65b9\u5f0f\u4e8e\u540c\u6b65\u65b9\u5f0f\u7684\u533a\u522b\u5728\u4e8e\u8282\u70b9\u7684\u521b\u5efa\u8fc7\u7a0b\uff08\u5305\u62ec\u7f51\u7edc\u901a\u4fe1\u548c\u670d\u52a1\u7aef\u7684\u8282\u70b9\u521b\u5efa\u8fc7\u7a0b\uff09\u662f\u5f02\u6b65\u7684\uff0c\u5728\u540c\u6b65\u63a5\u53e3\u8c03\u7528\u8fc7\u7a0b\u4e2d\uff0c\u5f00\u53d1\u8005\u9700\u8981\u5173\u6ce8\u63a5\u53e3\u629b\u51fa\u5f02\u5e38\u7684\u53ef\u80fd\uff0c\u4f46\u662f\u5728\u5f02\u6b65\u63a5\u53e3\u4e2d\uff0c<strong>\u63a5\u53e3\u672c\u8eab\u4e0d\u4f1a\u629b\u51fa\u5f02\u5e38\uff0c\u6240\u6709\u5f02\u5e38\u90fd\u4f1a\u5728\u56de\u8c03\u51fd\u6570\u4e2d\u901a\u8fc7Result Code\u6765\u4f53\u73b0<\/strong>\u3002<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_68b87693-e05b-4f45-b07f-108b3aecbc98\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_68b87693-e05b-4f45-b07f-108b3aecbc98\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.AsyncCallback;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\n\npublic class Zookeeper_Create_API_ASync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n\n    public static void main(String[] args) throws Exception {\n        ZooKeeper zookeeper = new ZooKeeper(\"127.0.0.1:2181\", 5000, new Zookeeper_Create_API_ASync_Usage());\n        System.out.println(zookeeper.getState());\n        connectedSemaphore.await();\n\n        zookeeper.create(\"\/zk-test-ephemeral-\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL,\n                new IStringCallback(), \"I am context. \");\n\n        zookeeper.create(\"\/zk-test-ephemeral-\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL,\n                new IStringCallback(), \"I am context. \");\n\n        zookeeper.create(\"\/zk-test-ephemeral-\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL,\n                new IStringCallback(), \"I am context. \");\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            connectedSemaphore.countDown();\n        }\n    }\n}\n\nclass IStringCallback implements AsyncCallback.StringCallback {\n    public void processResult(int rc, String path, Object ctx, String name) {\n        System.out.println(\"Create path result: [\" + rc + \", \" + path + \", \" + ctx + \", real path name: \" + name);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>CONNECTING\nCreate path result: [0, \/zk-test-ephemeral-, I am context. , real path name: \/zk-test-ephemeral-\nCreate path result: [-110, \/zk-test-ephemeral-, I am context. , real path name: null\nCreate path result: [0, \/zk-test-ephemeral-, I am context. , real path name: \/zk-test-ephemeral-0000000045<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u5df2\u7ecf\u6210\u529f\u4f7f\u7528\u5f02\u6b65\u65b9\u5f0f\u521b\u5efa\u4e86\u76f8\u5e94\u8282\u70b9\u3002<\/p>\n<p>3.2 \u5220\u9664\u8282\u70b9<\/p>\n<p>\u53ea\u5141\u8bb8\u5220\u9664\u53f6\u5b50\u8282\u70b9\uff0c\u5373\u4e00\u4e2a\u8282\u70b9\u5982\u679c\u6709\u5b50\u8282\u70b9\uff0c\u90a3\u4e48\u8be5\u8282\u70b9\u5c06\u65e0\u6cd5\u76f4\u63a5\u5220\u9664\uff0c\u5fc5\u987b\u5148\u5220\u6389\u5176\u6240\u6709\u5b50\u8282\u70b9\u3002\u540c\u6837\u4e5f\u6709\u540c\u6b65\u548c\u5f02\u6b65\u4e24\u79cd\u65b9\u5f0f\u3002<\/p>\n<p>\u2460 \u540c\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_e9594051-4787-4bd1-9cee-8ffe92ce6bd2\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_e9594051-4787-4bd1-9cee-8ffe92ce6bd2\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\n\npublic class Delete_API_Sync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000,\n                new Delete_API_Sync_Usage());\n        connectedSemaphore.await();\n\n        zk.create(path, \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path);\n        zk.create(path + \"\/c1\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path + \"\/c1\");\n        try {\n            zk.delete(path, -1);\n        } catch (Exception e) {\n            System.out.println(\"fail to delete znode: \" + path);\n        }\n\n        zk.delete(path + \"\/c1\", -1);\n        System.out.println(\"success delete znode: \" + path + \"\/c1\");\n        zk.delete(path, -1);\n        System.out.println(\"success delete znode: \" + path);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            }\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\nsuccess create znode: \/zk-book\/c1\nfail to delete znode: \/zk-book\nsuccess delete znode: \/zk-book\/c1\nsuccess delete znode: \/zk-book<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u82e5\u8282\u70b9\u6709\u5b50\u8282\u70b9\uff0c\u5219\u65e0\u6cd5\u5c06\u5176\u5220\u9664\uff0c\u5fc5\u987b\u5148\u5220\u9664\u5176\u6240\u6709\u5b50\u8282\u70b9\u3002<\/p>\n<p>\u2461 \u5f02\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_d0e00f4c-3e94-477e-9db2-da0148bded35\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_d0e00f4c-3e94-477e-9db2-da0148bded35\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.AsyncCallback;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\n\npublic class Delete_API_ASync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000,\n                new Delete_API_ASync_Usage());\n        connectedSemaphore.await();\n\n        zk.create(path, \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path);\n        zk.create(path + \"\/c1\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path + \"\/c1\");\n\n        zk.delete(path, -1, new IVoidCallback(), null);\n        zk.delete(path + \"\/c1\", -1, new IVoidCallback(), null);\n        zk.delete(path, -1, new IVoidCallback(), null);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            }\n        }\n    }\n}\n\nclass IVoidCallback implements AsyncCallback.VoidCallback {\n    public void processResult(int rc, String path, Object ctx) {\n        System.out.println(rc + \", \" + path + \", \" + ctx);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\nsuccess create znode: \/zk-book\/c1\n-111, \/zk-book, null\n0, \/zk-book\/c1, null\n0, \/zk-book, null<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u7ed3\u679c\u8868\u660e\u7b2c\u4e00\u6b21\u5220\u9664\/zk-book\u7684\u65f6\u5f02\u5e38\uff0cResultCode\u4e3a-111\u3002<\/p>\n<p>3.3 \u5b50\u8282\u70b9\u83b7\u53d6<\/p>\n<p>\u8bfb\u53d6\u8282\u70b9\u7684\u5b50\u8282\u70b9\u5217\u8868\uff0c\u540c\u6837\u53ef\u4ee5\u4f7f\u7528\u540c\u6b65\u548c\u5f02\u6b65\u7684\u65b9\u5f0f\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<p>\u2460 \u540c\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_610a308a-091c-437c-9c0a-fa8fb0ea7d25\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_610a308a-091c-437c-9c0a-fa8fb0ea7d25\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.List;\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\n\npublic class Zookeeper_GetChildren_API_Sync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk = null;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book-1\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000, new Zookeeper_GetChildren_API_Sync_Usage());\n        connectedSemaphore.await();\n\n        zk.create(path, \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path);\n        zk.create(path + \"\/c1\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path + \"\/c1\");\n        List&lt;String&gt; childrenList = zk.getChildren(path, true);\n        System.out.println(childrenList);\n\n        zk.create(path + \"\/c2\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path + \"\/c2\");\n        Thread.sleep(1000);\n        zk.create(path + \"\/c3\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path + \"\/c3\");\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            } else if (event.getType() == EventType.NodeChildrenChanged) {\n                try {\n                    System.out.println(\"ReGet Child:\" + zk.getChildren(event.getPath(), true));\n                } catch (Exception e) {\n                }\n            }\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>success create znode: \/zk-book-1\nsuccess create znode: \/zk-book-1\/c1\n[c1]\nsuccess create znode: \/zk-book-1\/c2\nReGet Child:[c1, c2]\nsuccess create znode: \/zk-book-1\/c3\nReGet Child:[c3, c1, c2]<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c<strong>Watcher\u901a\u77e5\u662f\u4e00\u6b21\u6027\u7684\uff0c\u5373\u4e00\u65e6\u89e6\u53d1\u4e00\u6b21\u901a\u77e5\u540e\uff0c\u8be5Watcher\u5c31\u5931\u6548\u4e86<\/strong>\uff0c\u56e0\u6b64\u5ba2\u6237\u7aef\u9700\u8981\u53cd\u590d\u6ce8\u518cWatcher\uff0c\u5373\u7a0b\u5e8f\u4e2d\u5728process\u91cc\u9762\u53c8\u6ce8\u518c\u4e86Watcher\uff0c\u5426\u5219\uff0c\u5c06\u65e0\u6cd5\u83b7\u53d6c3\u8282\u70b9\u7684\u521b\u5efa\u800c\u5bfc\u81f4\u5b50\u8282\u70b9\u53d8\u5316\u7684\u4e8b\u4ef6\u3002<\/p>\n<p>\u2461 \u5f02\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_620bdb4e-4a12-4f98-837b-958b44673653\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_620bdb4e-4a12-4f98-837b-958b44673653\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.List;\nimport java.util.concurrent.CountDownLatch;\nimport org.apache.zookeeper.AsyncCallback;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.data.Stat;\n\npublic class Zookeeper_GetChildren_API_ASync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk = null;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000, new Zookeeper_GetChildren_API_ASync_Usage());\n        connectedSemaphore.await();\n        zk.create(path, \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path);\n        zk.create(path + \"\/c1\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path + \"\/c1\");\n\n        zk.getChildren(path, true, new IChildren2Callback(), null);\n\n        zk.create(path + \"\/c2\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path + \"\/c2\");\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            } else if (event.getType() == EventType.NodeChildrenChanged) {\n                try {\n                    System.out.println(\"ReGet Child:\" + zk.getChildren(event.getPath(), true));\n                } catch (Exception e) {\n                }\n            }\n        }\n    }\n}\n\nclass IChildren2Callback implements AsyncCallback.Children2Callback {\n    public void processResult(int rc, String path, Object ctx, List&lt;String&gt; children, Stat stat) {\n        System.out.println(\"Get Children znode result: [response code: \" + rc + \", param path: \" + path + \", ctx: \"\n                + ctx + \", children list: \" + children + \", stat: \" + stat);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>success create znode: \/zk-book\nsuccess create znode: \/zk-book\/c1\nGet Children znode result: [response code: 0, param path: \/zk-book, ctx: null, children list: [c1], stat: 2901,2901,1478226062843,1478226062843,0,1,0,0,0,1,2902\n\nsuccess create znode: \/zk-book\/c2\nReGet Child:[c1, c2]<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u7ed3\u679c\u8868\u793a\u901a\u8fc7\u5f02\u6b65\u7684\u65b9\u5f0f\u53ef\u4ee5\u83b7\u53d6\u5b50\u8282\u70b9\u4fe1\u606f\u3002<\/p>\n<p>3.4 \u6570\u636e\u8282\u70b9\u83b7\u53d6<\/p>\n<p>\u5bf9\u4e8e\u8282\u70b9\u7684\u6570\u636e\u83b7\u53d6\uff0c\u540c\u6837\u5b58\u5728\u540c\u6b65\u548c\u5f02\u6b65\u4e24\u79cd\u65b9\u5f0f\u3002<\/p>\n<p>\u2460 \u540c\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_54325a84-7e14-4e26-a4ed-340744f63d7c\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_54325a84-7e14-4e26-a4ed-340744f63d7c\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.data.Stat;\n\npublic class GetData_API_Sync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk = null;\n    private static Stat stat = new Stat();\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000,\n                new GetData_API_Sync_Usage());\n        connectedSemaphore.await();\n        zk.create(path, \"123\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path);\n\n        System.out.println(\"the data of znode \" + path + \" is : \" + new String(zk.getData(path, true, stat)));\n        System.out.println(\"czxID: \" + stat.getCzxid() + \", mzxID: \" + stat.getMzxid() + \", version: \" + stat.getVersion());\n\n        zk.setData(path, \"123\".getBytes(), -1);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            } else if (event.getType() == EventType.NodeDataChanged) {\n                try {\n                    System.out.println(\"the data of znode \" + event.getPath() + \" is : \" + new String(zk.getData(event.getPath(), true, stat)));\n                    System.out.println(\"czxID: \" + stat.getCzxid() + \", mzxID: \" + stat.getMzxid() + \", version: \" + stat.getVersion());\n                } catch (Exception e) {\n                }\n            }\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\nthe data of \/zk-book is : 123\nczxID: 2924, mzxID: 2924, version: 0\nthe data of \/zk-book is : 123\nczxID: 2924, mzxID: 2925, version: 1<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u53ef\u4ee5\u4f7f\u7528getData\u51fd\u6570\u83b7\u53d6\u8282\u70b9\u7684\u6570\u636e\u3002<\/p>\n<p>\u2461 \u5f02\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_f5fd98b0-6b14-4827-a60c-d6e4cdc9e13b\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_f5fd98b0-6b14-4827-a60c-d6e4cdc9e13b\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\nimport org.apache.zookeeper.AsyncCallback;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.data.Stat;\n\npublic class GetData_API_ASync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000,\n                new GetData_API_ASync_Usage());\n        connectedSemaphore.await();\n\n        zk.create(path, \"123\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path);\n\n        zk.getData(path, true, new IDataCallback(), null);\n\n        zk.setData(path, \"123\".getBytes(), -1);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            } else if (event.getType() == EventType.NodeDataChanged) {\n                try {\n                    zk.getData(event.getPath(), true, new IDataCallback(), null);\n                } catch (Exception e) {\n                }\n            }\n        }\n    }\n}\n\nclass IDataCallback implements AsyncCallback.DataCallback {\n    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {\n        System.out.println(\"rc: \" + rc + \", path: \" + path + \", data: \" + new String(data));\n        System.out.println(\"czxID: \" + stat.getCzxid() + \", mzxID: \" + stat.getMzxid() + \", version: \" + stat.getVersion());\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\nrc: 0, path: \/zk-book, data: 123\nczxID: 2932, mzxID: 2932, version: 0\nrc: 0, path: \/zk-book, data: 123\nczxID: 2932, mzxID: 2933, version: 1<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u91c7\u7528\u5f02\u6b65\u65b9\u5f0f\u540c\u6837\u53ef\u65b9\u4fbf\u83b7\u53d6\u8282\u70b9\u7684\u6570\u636e\u3002<\/p>\n<p>3.5 \u66f4\u65b0\u6570\u636e<\/p>\n<p>\u5728\u66f4\u65b0\u6570\u636e\u65f6\uff0csetData\u65b9\u6cd5\u5b58\u5728\u4e00\u4e2aversion\u53c2\u6570\uff0c\u5176\u7528\u4e8e\u6307\u5b9a\u8282\u70b9\u7684\u6570\u636e\u7248\u672c\uff0c\u8868\u660e\u672c\u6b21\u66f4\u65b0\u64cd\u4f5c\u662f\u9488\u5bf9\u6307\u5b9a\u7684\u6570\u636e\u7248\u672c\u8fdb\u884c\u7684\uff0c\u4f46\u662f\uff0c\u5728getData\u65b9\u6cd5\u4e2d\uff0c\u5e76\u6ca1\u6709\u63d0\u4f9b\u6839\u636e\u6307\u5b9a\u6570\u636e\u7248\u672c\u6765\u83b7\u53d6\u6570\u636e\u7684\u63a5\u53e3\uff0c\u90a3\u4e48\uff0c\u8fd9\u91cc\u4e3a\u4f55\u8981\u6307\u5b9a\u6570\u636e\u66f4\u65b0\u7248\u672c\u5462\uff0c\u8fd9\u91cc\u65b9\u4fbf\u7406\u89e3\uff0c\u53ef\u4ee5\u7b49\u6548\u4e8eCAS\uff08compare and swap\uff09\uff0c\u5bf9\u4e8e\u503cV\uff0c\u6bcf\u6b21\u66f4\u65b0\u4e4b\u524d\u90fd\u4f1a\u6bd4\u8f83\u5176\u503c\u662f\u5426\u662f\u9884\u671f\u503cA\uff0c\u53ea\u6709\u7b26\u5408\u9884\u671f\uff0c\u624d\u4f1a\u5c06V\u539f\u5b50\u5316\u5730\u66f4\u65b0\u5230\u65b0\u503cB\u3002Zookeeper\u7684setData\u63a5\u53e3\u4e2d\u7684version\u53c2\u6570\u53ef\u4ee5\u5bf9\u5e94\u9884\u671f\u503c\uff0c\u8868\u660e\u662f\u9488\u5bf9\u54ea\u4e2a\u6570\u636e\u7248\u672c\u8fdb\u884c\u66f4\u65b0\uff0c\u5047\u5982\u4e00\u4e2a\u5ba2\u6237\u7aef\u8bd5\u56fe\u8fdb\u884c\u66f4\u65b0\u64cd\u4f5c\uff0c\u5b83\u4f1a\u643a\u5e26\u4e0a\u6b21\u83b7\u53d6\u5230\u7684version\u503c\u8fdb\u884c\u66f4\u65b0\uff0c\u800c\u5982\u679c\u8fd9\u6bb5\u65f6\u95f4\u5185\uff0cZookeeper\u670d\u52a1\u5668\u4e0a\u8be5\u8282\u70b9\u7684\u6570\u636e\u5df2\u7ecf\u88ab\u5176\u4ed6\u5ba2\u6237\u7aef\u66f4\u65b0\uff0c\u90a3\u4e48\u5176\u6570\u636e\u7248\u672c\u4e5f\u4f1a\u76f8\u5e94\u66f4\u65b0\uff0c\u800c\u5ba2\u6237\u7aef\u643a\u5e26\u7684version\u5c06\u65e0\u6cd5\u5339\u914d\uff0c\u65e0\u6cd5\u66f4\u65b0\u6210\u529f\uff0c\u56e0\u6b64<strong>\u53ef\u4ee5\u6709\u6548\u5730\u907f\u514d\u5206\u5e03\u5f0f\u66f4\u65b0\u7684\u5e76\u53d1\u95ee\u9898<\/strong>\u3002<\/p>\n<p>\u2460 \u540c\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_fac741d1-5ad9-4ef8-b723-3f4287acf88f\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_fac741d1-5ad9-4ef8-b723-3f4287acf88f\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.KeeperException;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.data.Stat;\n\npublic class SetData_API_Sync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000, new SetData_API_Sync_Usage());\n        connectedSemaphore.await();\n\n        zk.create(path, \"123\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path);\n        zk.getData(path, true, null);\n\n        Stat stat = zk.setData(path, \"456\".getBytes(), -1);\n        System.out.println(\"czxID: \" + stat.getCzxid() + \", mzxID: \" + stat.getMzxid() + \", version: \" + stat.getVersion());\n        Stat stat2 = zk.setData(path, \"456\".getBytes(), stat.getVersion());\n        System.out.println(\"czxID: \" + stat2.getCzxid() + \", mzxID: \" + stat2.getMzxid() + \", version: \" + stat2.getVersion());\n        try {\n            zk.setData(path, \"456\".getBytes(), stat.getVersion());\n        } catch (KeeperException e) {\n            System.out.println(\"Error: \" + e.code() + \",\" + e.getMessage());\n        }\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            }\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\nczxID: 2936, mzxID: 2937, version: 1\nczxID: 2936, mzxID: 2938, version: 2\nError: BADVERSION,KeeperErrorCode = BadVersion for \/zk-book<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u7531\u4e8e\u643a\u5e26\u7684\u6570\u636e\u7248\u672c\u4e0d\u6b63\u786e\uff0c\u800c\u65e0\u6cd5\u6210\u529f\u66f4\u65b0\u8282\u70b9\u3002\u5176\u4e2d\uff0csetData\u4e2d\u7684version\u53c2\u6570\u8bbe\u7f6e-1\u542b\u4e49\u4e3a\u5ba2\u6237\u7aef\u9700\u8981\u57fa\u4e8e\u6570\u636e\u7684\u6700\u65b0\u7248\u672c\u8fdb\u884c\u66f4\u65b0\u64cd\u4f5c\u3002<\/p>\n<p>\u2461 \u5f02\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_35d3f491-5075-46af-a986-04395778b8f5\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_35d3f491-5075-46af-a986-04395778b8f5\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\nimport org.apache.zookeeper.AsyncCallback;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.data.Stat;\n\npublic class SetData_API_ASync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000, new SetData_API_ASync_Usage());\n        connectedSemaphore.await();\n\n        zk.create(path, \"123\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + path);\n        zk.setData(path, \"456\".getBytes(), -1, new IStatCallback(), null);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        if (KeeperState.SyncConnected == event.getState()) {\n            if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                connectedSemaphore.countDown();\n            }\n        }\n    }\n}\n\nclass IStatCallback implements AsyncCallback.StatCallback {\n    public void processResult(int rc, String path, Object ctx, Stat stat) {\n        System.out.println(\"rc: \" + rc + \", path: \" + path + \", stat: \" + stat);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\nrc: 0, path: \/zk-book, stat: 2942,2943,1478228414526,1478228414545,1,0,0,96876700808708136,3,0,2942<\/pre>\n<\/div>\n<p>rc\uff08ResultCode\uff09\u4e3a0\uff0c\u8868\u660e\u6210\u529f\u66f4\u65b0\u8282\u70b9\u6570\u636e\u3002<\/p>\n<p>3.6 \u68c0\u6d4b\u8282\u70b9\u662f\u5426\u5b58\u5728<\/p>\n<p>\u5728\u8c03\u7528\u63a5\u53e3\u65f6\u6ce8\u518cWatcher\u7684\u8bdd\uff0c\u8fd8\u53ef\u4ee5\u5bf9\u8282\u70b9\u662f\u5426\u5b58\u5728\u8fdb\u884c\u76d1\u542c\uff0c\u4e00\u65e6\u8282\u70b9\u88ab\u521b\u5efa\u3001\u88ab\u5220\u9664\u3001\u6570\u636e\u66f4\u65b0\uff0c\u90fd\u4f1a\u901a\u77e5\u5ba2\u6237\u7aef\u3002<\/p>\n<p>\u2460 \u540c\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_43915fbf-b76f-49f9-8c67-f92b5505285b\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_43915fbf-b76f-49f9-8c67-f92b5505285b\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\n\npublic class Exist_API_Sync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000, \/\/\n                new Exist_API_Sync_Usage());\n        connectedSemaphore.await();\n\n        zk.exists(path, true);\n\n        zk.create(path, \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        zk.setData(path, \"123\".getBytes(), -1);\n\n        zk.create(path + \"\/c1\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path + \"\/c1\");\n\n        zk.delete(path + \"\/c1\", -1);\n        zk.delete(path, -1);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        try {\n            if (KeeperState.SyncConnected == event.getState()) {\n                if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                    connectedSemaphore.countDown();\n                } else if (EventType.NodeCreated == event.getType()) {\n                    System.out.println(\"success create znode: \" + event.getPath());\n                    zk.exists(event.getPath(), true);\n                } else if (EventType.NodeDeleted == event.getType()) {\n                    System.out.println(\"success delete znode: \" + event.getPath());\n                    zk.exists(event.getPath(), true);\n                } else if (EventType.NodeDataChanged == event.getType()) {\n                    System.out.println(\"data changed of znode: \" + event.getPath());\n                    zk.exists(event.getPath(), true);\n                }\n            }\n        } catch (Exception e) {\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>success create znode: \/zk-book\ndata changed of znode: \/zk-book\nsuccess create znode: \/zk-book\/c1\nsuccess delete znode: \/zk-book<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\uff1a<\/p>\n<p>\u00b7 \u65e0\u8bba\u8282\u70b9\u662f\u5426\u5b58\u5728\uff0c\u90fd\u53ef\u4ee5\u901a\u8fc7exists\u63a5\u53e3\u6ce8\u518cWatcher\u3002<\/p>\n<p>\u00b7 \u6ce8\u518c\u7684Watcher\uff0c\u5bf9\u8282\u70b9\u521b\u5efa\u3001\u5220\u9664\u3001\u6570\u636e\u66f4\u65b0\u4e8b\u4ef6\u8fdb\u884c\u76d1\u542c\u3002<\/p>\n<p>\u00b7 \u5bf9\u4e8e\u6307\u5b9a\u8282\u70b9\u7684\u5b50\u8282\u70b9\u7684\u5404\u79cd\u53d8\u5316\uff0c\u4e0d\u4f1a\u901a\u77e5\u5ba2\u6237\u7aef\u3002<\/p>\n<p>\u2461 \u5f02\u6b65\u65b9\u5f0f<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_78b9cf9e-7c00-423f-8261-ac986d709db2\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_78b9cf9e-7c00-423f-8261-ac986d709db2\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport java.util.concurrent.CountDownLatch;\n\nimport org.apache.zookeeper.AsyncCallback;\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.WatchedEvent;\nimport org.apache.zookeeper.Watcher;\nimport org.apache.zookeeper.Watcher.Event.EventType;\nimport org.apache.zookeeper.Watcher.Event.KeeperState;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\nimport org.apache.zookeeper.data.Stat;\n\npublic class Exist_API_ASync_Usage implements Watcher {\n    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);\n    private static ZooKeeper zk;\n\n    public static void main(String[] args) throws Exception {\n        String path = \"\/zk-book\";\n        zk = new ZooKeeper(\"127.0.0.1:2181\", 5000,\n                new Exist_API_ASync_Usage());\n        connectedSemaphore.await();\n\n        zk.exists(path, true, new IIStatCallback(), null);\n\n        zk.create(path, \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        zk.setData(path, \"123\".getBytes(), -1);\n\n        zk.create(path + \"\/c1\", \"\".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);\n        System.out.println(\"success create znode: \" + path + \"\/c1\");\n\n        zk.delete(path + \"\/c1\", -1);\n        zk.delete(path, -1);\n\n        Thread.sleep(Integer.MAX_VALUE);\n    }\n\n    public void process(WatchedEvent event) {\n        try {\n            if (KeeperState.SyncConnected == event.getState()) {\n                if (EventType.None == event.getType() &amp;&amp; null == event.getPath()) {\n                    connectedSemaphore.countDown();\n                } else if (EventType.NodeCreated == event.getType()) {\n                    System.out.println(\"success create znode: \" + event.getPath());\n                    zk.exists(event.getPath(), true, new IIStatCallback(), null);\n                } else if (EventType.NodeDeleted == event.getType()) {\n                    System.out.println(\"success delete znode: \" + event.getPath());\n                    zk.exists(event.getPath(), true, new IIStatCallback(), null);\n                } else if (EventType.NodeDataChanged == event.getType()) {\n                    System.out.println(\"data changed of znode: \" + event.getPath());\n                    zk.exists(event.getPath(), true, new IIStatCallback(), null);\n                }\n            }\n        } catch (Exception e) {\n        }\n    }\n}\n\nclass IIStatCallback implements AsyncCallback.StatCallback {\n    public void processResult(int rc, String path, Object ctx, Stat stat) {\n        System.out.println(\"rc: \" + rc + \", path: \" + path + \", stat: \" + stat);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>rc: -101, path: \/zk-book, stat: null\nsuccess create znode: \/zk-book\nrc: 0, path: \/zk-book, stat: 2974,2974,1478229717889,1478229717889,0,0,0,0,0,0,2974\n\ndata changed of znode: \/zk-book\nrc: 0, path: \/zk-book, stat: 2974,2975,1478229717889,1478229717922,1,0,0,0,3,0,2974\n\nsuccess create znode: \/zk-book\/c1\nsuccess delete znode: \/zk-book\nrc: -101, path: \/zk-book, stat: null<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u5f53\u8282\u70b9\u4e0d\u5b58\u5728\u65f6\uff0c\u5176rc\uff08ResultCode\uff09\u4e3a-101\u3002<\/p>\n<p>3.7 \u6743\u9650\u63a7\u5236<\/p>\n<p>\u901a\u8fc7\u8bbe\u7f6eZookeeper\u670d\u52a1\u5668\u4e0a\u6570\u636e\u8282\u70b9\u7684ACL\u63a7\u5236\uff0c\u5c31\u53ef\u4ee5\u5bf9\u5176\u5ba2\u6237\u7aef\u5bf9\u8be5\u6570\u636e\u8282\u70b9\u7684\u8bbf\u95ee\u6743\u9650\uff1a<strong>\u5982\u679c\u7b26\u5408ACL\u63a7\u5236\uff0c\u5219\u53ef\u4ee5\u8fdb\u884c\u8bbf\u95ee\uff0c\u5426\u5219\u65e0\u6cd5\u8bbf\u95ee<\/strong>\u3002<\/p>\n<p>\u2460 \u4f7f\u7528\u65e0\u6743\u9650\u4fe1\u606f\u7684Zookeeper\u4f1a\u8bdd\u8bbf\u95ee\u542b\u6743\u9650\u4fe1\u606f\u7684\u6570\u636e\u8282\u70b9<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_3e11c0d7-4a56-4f29-b4ab-aa87b5d525f4\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_3e11c0d7-4a56-4f29-b4ab-aa87b5d525f4\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\n\npublic class AuthSample_Get {\n    final static String PATH = \"\/zk-book-auth_test\";\n\n    public static void main(String[] args) throws Exception {\n\n        ZooKeeper zookeeper1 = new ZooKeeper(\"127.0.0.1:2181\", 5000, null);\n        zookeeper1.addAuthInfo(\"digest\", \"foo:true\".getBytes());\n        zookeeper1.create(PATH, \"init\".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.EPHEMERAL);\n        System.out.println(\"success create znode: \" + PATH);\n        ZooKeeper zookeeper2 = new ZooKeeper(\"127.0.0.1:2181\", 5000, null);\n        zookeeper2.getData(PATH, false, null);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>success create znode: \/zk-book-auth_test\nException in thread \"main\" org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for \/zk-book-auth_test\n    at org.apache.zookeeper.KeeperException.create(KeeperException.java:113)\n    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)\n    at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1155)\n    at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1184)\n    at com.hust.grid.leesf.examples.AuthSample_Get.main(AuthSample_Get.java:17)<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u8868\u793a\u6743\u9650\u4e0d\u591f\uff0c\u4e0d\u80fd\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<p>\u2461 \u5220\u9664\u5e26\u6743\u9650\u63a7\u5236\u7684\u8282\u70b9<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_b3f8f916-2925-499a-a73b-19f84d50997e\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_b3f8f916-2925-499a-a73b-19f84d50997e\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.hust.grid.leesf.examples;\n\nimport org.apache.zookeeper.CreateMode;\nimport org.apache.zookeeper.ZooDefs.Ids;\nimport org.apache.zookeeper.ZooKeeper;\n\npublic class AuthSample_Delete {\n    final static String PATH = \"\/zk-book-auth_test\";\n    final static String PATH2 = \"\/zk-book-auth_test\/child\";\n\n    public static void main(String[] args) throws Exception {\n        ZooKeeper zookeeper1 = new ZooKeeper(\"127.0.0.1:2181\", 5000, null);\n        zookeeper1.addAuthInfo(\"digest\", \"foo:true\".getBytes());\n        zookeeper1.create(PATH, \"init\".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);\n\n        zookeeper1.create(PATH2, \"init\".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.EPHEMERAL);\n\n        try {\n            ZooKeeper zookeeper2 = new ZooKeeper(\"127.0.0.1:2181\", 5000, null);\n            zookeeper2.delete(PATH2, -1);\n        } catch (Exception e) {\n            System.out.println(\"fail to delete: \" + e.getMessage());\n        }\n\n        ZooKeeper zookeeper3 = new ZooKeeper(\"127.0.0.1:2181\", 5000, null);\n        zookeeper3.addAuthInfo(\"digest\", \"foo:true\".getBytes());\n        zookeeper3.delete(PATH2, -1);\n        System.out.println(\"success delete znode: \" + PATH2);\n\n        ZooKeeper zookeeper4 = new ZooKeeper(\"127.00.1:2181\", 5000, null);\n        zookeeper4.delete(PATH, -1);\n        System.out.println(\"success delete znode: \" + PATH);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b<\/p>\n<div class=\"cnblogs_code\">\n<pre>fail to delete: KeeperErrorCode = NoAuth for \/zk-book-auth_test\/child\nsuccess delete znode: \/zk-book-auth_test\/child\nsuccess delete znode: \/zk-book-auth_test<\/pre>\n<\/div>\n<p>\u7ed3\u679c\u8868\u660e\u82e5\u6ca1\u6709\u6743\u9650\uff0c\u5219\u65e0\u6cd5\u5220\u9664\u8282\u70b9\u3002<\/p>\n<p><strong>\u56db\u3001\u603b\u7ed3<\/strong><\/p>\n<p>\u57fa\u4e8e\u539f\u751f\u6001\u7684JAVA API\u7684\u8c03\u7528\u76f8\u5bf9\u8f83\u7b80\u5355\uff0c\u7b14\u8005\u540e\u7eed\u4f1a\u5bf9\u6e90\u7801\u8fdb\u884c\u5206\u6790\u3002\u672c\u535a\u5ba2\u7684\u6240\u6709\u4ee3\u7801\u4e5f\u540c\u6b65\u4e0a\u4f20\u81f3<a href=\"https:\/\/github.com\/leesf\/zookeeper_examples\" target=\"_blank\" rel=\"noopener\">github<\/a>\uff0c\u4e5f\u8c22\u8c22\u5404\u4f4d\u56ed\u53cb\u7684\u89c2\u770b\uff5e<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u524d\u8a00 \u4e0a\u4e00\u7bc7\u535a\u5ba2\u6211\u4eec\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u64cd\u4f5cZookeper\u7684\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u5e76\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\uff0c\u8fd9\u7bc7\u4e3b\u8981\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7API\uff08JAVA\uff09\u6765\u64cd\u4f5cZookeeper\u3002 \u4e8c\u3001\u5f00\u53d1\u73af\u5883\u914d\u7f6e \u9996\u5148\u6253\u5f00Zookeeper\u670d\u52a1\u7aef\uff08\u4e0a\u4e00\u7bc7\u535a\u5ba2\u6709\u5177\u4f53\u7684\u65b9\u6cd5\uff09\uff0c\u65b9\u4fbf\u5ba2\u6237\u7aef\u8fde\u63a5\u3002 \u914d\u7f6e\u5f00\u53d1\u73af\u5883\u73af\u5883\u53ef\u4ee5\u6709\u4e24\u79cd\u65b9\u5f0f\uff1a\u2460 \u76f4\u63a5\u4e0b\u8f7d\u76f8\u5173\u7684\u4f9d\u8d56Jar\u5305\uff0c\u7136\u540e\u5728IDE\u4e2d\u6dfb\u52a0\u4f9d\u8d56 \u2461 \u5efa\u7acbmaven\u9879\u76ee\uff0c\u4f7f\u7528maven\u8fdb\u884c\u4f9d\u8d56\u7ba1\u7406\u3002 \u2460 \u624b\u52a8\u6dfb\u52a0\u4f9d\u8d56\u81f3IDE \u6b65\u9aa4\u4e00\uff1a\u70b9\u51fb\u8fd9\u91cc\u4e0b\u8f7d\u5bf9\u5e94\u7248\u672c\u7684Jar\u5305\uff0c\u5305\u62ec\uff08jar\u3001javadoc.jar\u3001sources.jar\uff09\uff0c\u7b14\u8005\u5bf9\u5e94\u4e0b\u8f7d\u7684Zookeeper3.4.6\u7248\u672c\u3002 \u6b65\u9aa4\u4e8c\uff1a\u6253\u5f00IDE\uff08\u7b14\u8005\u4f7f\u7528eclispe\uff09\uff0c\u65b0\u5efa\u540d\u4e3azookeeper_examples_none_maven\u7684java\u9879\u76ee\u3002\u7531\u4e8e\u9700\u8981\u5355\u72ec\u6dfb\u52a0\u4f9d\u8d56\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7ba1\u7406\uff0c\u7b14\u8005\u5728\u9879\u76ee\u4e0b\u65b0\u5efa\u4e86jar\u6587\u4ef6\u5939\uff0c\u7528\u4e8e\u5b58\u653e\u672c\u9879\u76ee\u7684jar\u5305\uff08\u5c06\u6b65\u9aa4\u4e00\u4e0b\u8f7d\u76843\u4e2ajar\u5305\u5b58\u653e\u81f3\u6b64\u6587\u4ef6\u5939\u4e0b\uff09\u3002 \u6b65\u9aa4\u4e09\uff1a\u5728eclipse\u4e2d\u6dfb\u52a0\u4f9d\u8d56 \u6b65\u9aa4\u56db\uff1a\u65b0\u5efa\u5305\u3001Java\u7c7b\u8fdb\u884c\u6d4b\u8bd5 Zookeeper_Constructor_Usage_Simple.java package com.hust.grid.leesf.examples; import java.io.IOException; import [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-835","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=835"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/835\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}