pom.xml配置zookeeper
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.14</version></dependency>
创建create
String result = zk.create("/test_node","test".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
异步
class CreateCallBack implements AsyncCallback.StringCallback{public void processResult(int rc, String path, Object ctx, String name) {System.out.println("创建节点: " + path);System.out.println((String)ctx);}}
String ctx = "{'create':'success'}";zk.create("/asyn_node","test".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT,new CreateCallBack(),ctx);
修改节点数据
zk.setData("/test_node","update_data".getBytes(),0);
删除
zk.delete("/test_node",1);
ACL
String writerId = DigestAuthenticationProvider.generateDigest("writer:123456");String readerId = DigestAuthenticationProvider.generateDigest("reader:654321");Id wId = new Id("digest", writerId);Id rId = new Id("digest", readerId);List<ACL> aclList = new ArrayList<ACL>();aclList.add(new ACL(ZooDefs.Perms.ALL, wId));aclList.add(new ACL(ZooDefs.Perms.READ, rId));zk.create("/acl_node", "node".getBytes(), aclList, CreateMode.PERSISTENT);
zk.addAuthInfo("digest","writer:123456".getBytes());zk.create("/acl_node/digest_node","digest_node".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
客户端Curator
zookeeper原生api的不足之处
超时重连,不支持自动,需要手动重连
Watch注册一次会失效
不支持递归创建节点
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.2.0</version></dependency>
CuratorFramework client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").sessionTimeoutMs(15000).retryPolicy(new RetryNTimes(3,5000)).namespace("namespace").build();client.start();try {client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE).forPath("/super/test","testdata".getBytes());}catch (Exception e){e.printStackTrace();}
