当前位置: 首页 > news >正文

论坛网站建设开源工具施工企业质量管理体系认证有效期

论坛网站建设开源工具,施工企业质量管理体系认证有效期,网站开发有哪些要求,dw网页制作教程怎么改背景Zookeeper入门 Zookeeper 是一个开源的分布式的#xff0c;为分布式框架提供协调服务的Apache 项目。 Zookeeper工作机制 Zookeeper从设计模式角度来理解#xff1a;是一个基于观察者模式设计的分布式服务管理框架#xff0c;它负责存储和管理大家都关心的数据#xff0c…Zookeeper入门 Zookeeper 是一个开源的分布式的为分布式框架提供协调服务的Apache 项目。 Zookeeper工作机制 Zookeeper从设计模式角度来理解是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据然后接受观察者的注册一旦这些数据的状态发生变化Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。 Zookeeper特点 1Zookeeper一个领导者Leader多个跟随者Follower组成的集群。 2集群中只要有半数以上节点存活Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。 3全局数据一致每个Server保存一份相同的数据副本Client无论连接到哪个Server数据都是一致的。 4更新请求顺序执行来自同一个Client的更新请求按其发送顺序依次执行。 5数据更新原子性一次数据更新要么成功要么失败。 6实时性在一定时间范围内Client能读到最新数据。 数据结构 ZooKeeper 数据模型的结构与Unix 文件系统很类似整体上可以看作是一棵树每个节点称做一个ZNode。每一个ZNode 默认能够存储1MB 的数据每个ZNode 都可以通过其路径唯一标识。 应用场景 提供的服务包括统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。 统一命名服务 在分布式环境下经常需要对应用/服务进行统一命名便于识别。 统一配置管理 分布式环境下配置文件同步非常常见 一般要求一个集群中所有节点的配置信息一致比如Kafka集群对配置文件修改同步到各个节点 配置管理交给Zookeeper实现 可将配置信息写入ZooKeeper上的一个Znode各个客户端服务器监听这个Znode一旦Znode中的数据被修改ZooKeeper将通知各个客户端服务器 统一集群管理 分布式环境中实时掌握每个节点的状态是必要的 可根据节点实时状态做出一些调整 ZooKeeper可以实现实时监控节点状态变化 可将节点信息写入ZooKeeper上的一个ZNode监听Znode可获取它的实时的状态变化 服务器动态上下线 客户端能实时洞察到服务器上下线的变化 软负载均衡 在Zookeeper中记录每台服务器的访问数让访问数最少的服务器去处理最新的客户端请求 下载安装 配置参数解读 Zookeeper中的配置文件zoo.cfg中参数含义解读如下 tickTime 2000通信心跳时间Zookeeper服务器与客户端心跳时间单位毫秒 initLimit 10LF初始通信时限 Leader和Follower初始连接时能容忍的最多心跳数tickTime的数量 syncLimit 5LF同步通信时限 Leader和Follower之间通信时间如果超过syncLimit * tickTimeLeader认为Follwer死掉从服务器列表中删除Follwer dataDir保存Zookeeper中的数据 注意默认的tmp目录容易被Linux系统定期删除所以一般不用默认的tmp目录。 clientPort 2181客户端连接端口通常不做修改。 客户端命令行操作 命令基本语法功能描述help显示所有操作命令ls pathls 查看当前znode的子节点 -w 监听子节点变化 -s附加次级信息create普通创建 -s 含有序列 -e临时重启或者超时消失get path获得节点的值可监听 -w 监听节点内容变化 -s 附加次级信息set设置节点的具体值stat查看节点状态delete删除节点deleteall递归删除节点 znode节点数据信息 查看当前znode中所包含的内容 [zk: hadoop102 :2181(CONNECTED) 0] ls [zookeeper]查看当前节点详细数据 [zk: hadoop102 :2181(CONNECTED) 5] ls s / [zookeeper]cZxid 0x0 ctime Thu Jan 01 08:00:00 CST 1970 mZxid 0x0 mtime Thu Jan 01 08:00:00 CST 1970 pZxid 0x0 cversion 1 dataVersion 0 aclVersion 0 ephemeralOwner 0x0 dataLength 0 numChildren 11 czxid 创建节点的事务 zxid 每次修改ZooKeeper状态都会 产生一个 ZooKeeper事务 ID。事务 ID是 ZooKeeper中所有修改总的次序。每 次 修改都有唯一的 zxid如果 zxid1小于 zxid2那么 zxid1在 zxid2之前发生。 2 ctime znode被创建的毫秒数从 1970年开始 3 mzxid znode最后更新的事务 zxid 4 mtime znode最后修改的毫秒数从 1970年开始 5 pZxid znode最后更新的子节点 zxid 6cversionznode 子节点变化号znode 子节点修改次数 7dataversionznode 数据变化号 8aclVersionznode 访问控制列表的变化号 9ephemeralOwner如果是临时节点这个是znode 拥有者的session id。如果不是 临时节点则是0。 10dataLengthznode 的数据长度 11numChildrenznode 子节点数量 节点类型持久/短暂/有序号/无序号 监听器原理 客户端注册监听它关心的目录节点当目录节点发生变化数据改变、节点删除、子目录节点增加删除时ZooKeeper 会通知客户端。监听机制保证ZooKeeper 保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。 客户端API操作 添加pom文件 propertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversionRELEASE/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.8.2/version/dependencydependencygroupIdorg.apache.zookeeper/groupIdartifactIdzookeeper/artifactIdversion3.5.7/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion4.3.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion4.3.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-client/artifactIdversion4.3.0/version/dependency/dependencies需要在项目的src/main/resources目录下新建一个文件命名为“ log4j.properties”在文件中填入。 log4j.rootLoggerINFO, stdout log4j.appender.stdoutorg.apache.log4j.ConsoleAppender log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern%d %p [%c] - %m%n log4j.appender.logfileorg.apache.log4j.FileAppender log4j.appender.logfile.Filetarget/spring.log log4j.appender.logfile.layoutorg.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern%d %p [%c] - %m%nSlf4j public class ZKClient {// 注意逗号左右不能有空格private static final String CONNECTSTRING 127.0.0.1:2181;private static final int SESSIONTIMEOUT 2000;private ZooKeeper zookeeper;// 创建 ZooKeeper客户端Beforepublic void init() throws IOException {zookeeper new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, watchedEvent - {log.info(---------------------------------);ListString children;try {children zookeeper.getChildren(/, true);for (String child : children) {log.info(child);}log.info(---------------------------------);} catch (Exception e) {e.printStackTrace();}});}// 创建子节点Testpublic void create() throws KeeperException, InterruptedException {zookeeper.create(/kangxiaozhuang, ss.avi.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}// 获取子节点并监听节点变化Testpublic void getChildren() throws KeeperException, InterruptedException {ListString children zookeeper.getChildren(/, true);for (String child : children) {log.info(child);}// 延时Thread.sleep(5000);}// 节点是否存在Testpublic void exist() throws KeeperException, InterruptedException {Stat stat zookeeper.exists(/atguigu, false);log.info(stat null ? not exist : exist);} }客户端向服务端写数据流程 写流程之写入请求直接发送给Leader节点 写流程之写入请求发送给follower节点 服务器动态上下线监听案例 某分布式系统中主节点可以有多台可以动态上下线任意一台客户端都能实时感知到主节点服务器的上下线 先在集群上创建/servers 节点 create /servers servers服务器端向Zookeeper注册代码 package com.zhuang.zookeeper.case1;import lombok.extern.slf4j.Slf4j; import org.apache.zookeeper.*; import java.io.IOException;/*** 服务器动态上下线服务端*/ Slf4j public class DistributeServer {private static final String CONNECTSTRING 127.0.0.1:2181;private static final int SESSIONTIMEOUT 2000;private ZooKeeper zk;public static void main(String[] args) throws IOException, KeeperException, InterruptedException {DistributeServer server new DistributeServer();// 1 获取zk连接server.getConnect();// 2 注册服务器到zk集群server.regist(hadoop101);// 3 启动业务逻辑睡觉server.business();}// 业务功能private void business() throws InterruptedException {Thread.sleep(Long.MAX_VALUE);}// 注册服务器private void regist(String hostname) throws KeeperException, InterruptedException {zk.create(/servers/ hostname, hostname.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);log.info(hostname is online);}private void getConnect() throws IOException {zk new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, watchedEvent - {});} }DistributeClient客户端代码 package com.zhuang.zookeeper.case1;import lombok.extern.slf4j.Slf4j; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper;import java.io.IOException; import java.util.ArrayList; import java.util.List;/*** 服务器动态上下线客户端*/ Slf4j public class DistributeClient {private static final String CONNECTSTRING 127.0.0.1:2181;private static final int SESSIONTIMEOUT 2000;private ZooKeeper zk;public static void main(String[] args) throws IOException, KeeperException, InterruptedException {DistributeClient client new DistributeClient();// 1 获取zk连接client.getConnect();// 2 监听/servers下面子节点的增加和删除client.getServerList();// 3 业务逻辑睡觉client.business();}private void business() throws InterruptedException {Thread.sleep(Integer.MAX_VALUE);}// 获取服务器列表信息private void getServerList() throws KeeperException, InterruptedException {// 1 获取服务器 子节点信息并且对父节点进行监听ListString children zk.getChildren(/servers, true);// 2 存储服务器信息列表ArrayListString servers new ArrayList();// 3 遍历所有节点获取节点中的主机名称信息for (String child : children) {byte[] data zk.getData(/servers/ child, false, null);servers.add(new String(data));}// 打印log.info(String.valueOf(servers));}private void getConnect() throws IOException {zk new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, watchedEvent - {try {getServerList();} catch (Exception e) {e.printStackTrace();}});} }ZooKeeper分布式锁案例 什么叫做分布式锁呢比如说进程 1在使用该资源的时候会先去获得锁 进程 1获得锁以后会对该资源保持独占这样其他进程就无法访问该资源进程1用完该资源以后就将锁释放掉让其他进程来获得锁那么通过这个锁机制我们就能保证了分布式系统中多个进程能够有序的访问该临界资源。那么我们把这个分布式环境下的这个锁叫作分布式锁。 分布式锁实现 package com.zhuang.zookeeper.case2;import lombok.extern.slf4j.Slf4j; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat;import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch;Slf4j public class DistributedLock {// zookeeper server 列表private static final String CONNECTSTRING 127.0.0.1:2181;// 超时时间private static final int SESSIONTIMEOUT 2000;private final ZooKeeper zk;private final CountDownLatch connectLatch new CountDownLatch(1);private final CountDownLatch waitLatch new CountDownLatch(1);// 当前client等待的子节点private String waitPath;// 当前client创建的子节点private String currentMode;private String rootNode locks;private String subNode seq-;// 和 zk 服务建立连接并创建根节点public DistributedLock() throws IOException, InterruptedException, KeeperException {// 获取连接zk new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, watchedEvent - {// connectLatch 如果连接上zk 可以释放if (watchedEvent.getState() Watcher.Event.KeeperState.SyncConnected) {connectLatch.countDown();}// waitLatch 需要释放if (watchedEvent.getType() Watcher.Event.EventType.NodeDeleted watchedEvent.getPath().equals(waitPath)) {waitLatch.countDown();}});// 等待zk正常连接后往下走程序connectLatch.await();// 判断根节点/locks是否存在Stat stat zk.exists(/ rootNode, false);// 如果根节点不存在则创建根节点根节点类型为永久节点if (stat null) {log.info(根节点不存在);// 创建一下根节点zk.create(/ rootNode, rootNode.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}}// 对zk加锁public void zklock() {// 创建对应的临时带序号节点try {currentMode zk.create(/ rootNode / subNode, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);// wait一小会, 让结果更清晰一些Thread.sleep(10);// 判断创建的节点是否是最小的序号节点如果是获取到锁如果不是监听他序号前一个节点ListString children zk.getChildren(/locks, false);// 如果children 只有一个值那就直接获取锁 如果有多个节点需要判断谁最小if (children.size() 1) {return;} else {Collections.sort(children);// 获取节点名称 seq-00000000String thisNode currentMode.substring(/locks/.length());// 通过seq-00000000获取该节点在children集合的位置int index children.indexOf(thisNode);// 判断if (index -1) {log.error(数据异常);} else if (index 0) {// 就一个节点可以获取锁了return;} else {// 需要监听 他前一个节点变化waitPath /locks/ children.get(index - 1);zk.getData(waitPath, true, new Stat());// 等待监听waitLatch.await();return;}}} catch (InterruptedException | KeeperException e) {e.printStackTrace();Thread.currentThread().interrupt();}}// 解锁public void unZkLock() {// 删除节点try {zk.delete(this.currentMode, -1);} catch (KeeperException | InterruptedException e) {e.printStackTrace();Thread.currentThread().interrupt();}}}分布式锁测试 (1)创建两个线程 package com.zhuang.zookeeper.case2;import lombok.extern.slf4j.Slf4j; import org.apache.zookeeper.KeeperException;import java.io.IOException;Slf4j public class DistributedLockTest {public static void main(String[] args) throws InterruptedException, IOException, KeeperException {final DistributedLock lock1 new DistributedLock();final DistributedLock lock2 new DistributedLock();new Thread(() - {try {lock1.zklock();log.info(线程1 启动获取到锁);Thread.sleep(5000);lock1.unZkLock();log.info(线程1 释放锁);} catch (InterruptedException e) {e.printStackTrace();Thread.currentThread().interrupt();}}).start();new Thread(() - {try {lock2.zklock();log.info(线程2 启动获取到锁);Thread.sleep(5000);lock2.unZkLock();log.info(线程2 释放锁);} catch (InterruptedException e) {e.printStackTrace();Thread.currentThread().interrupt();}}).start();} }(2) 观察控制台变化 线程1获取锁 线程1释放锁 线程2获取锁 线程2释放锁 Curator框架实现分布式锁案例 原生的 Java API开发存在的问题 1) 会话连接是异步的需要自己去处理。比如使用 CountDownLatch 2) Watch需要重复注册不然就不能生效 3) 开发的复杂性还是比较高的 4) 不支持多节点删除和创建。需要自己去递归 Curator是一个专门解决分布式锁的框架解决了原生 Java API开发分布式遇到的问题。 详情请查看官方文档 https://curator.apache.org/index.html Curator案例实操 dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion4.3.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion4.3.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-client/artifactIdversion4.3.0/version/dependency代码实现 package com.zhuang.zookeeper.case3;import lombok.extern.slf4j.Slf4j; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry;Slf4j public class CuratorLockTest {public static void main(String[] args) {// 创建分布式锁1InterProcessMutex lock1 new InterProcessMutex(getCuratorFramework(), /locks);// 创建分布式锁2InterProcessMutex lock2 new InterProcessMutex(getCuratorFramework(), /locks);new Thread(() - {try {lock1.acquire();log.info(线程1 获取到锁);lock1.acquire();log.info(线程1 再次获取到锁);Thread.sleep(5000);lock1.release();log.info(线程1 释放锁);lock1.release();log.info(线程1 再次释放锁);} catch (Exception e) {e.printStackTrace();Thread.currentThread().interrupt();}}).start();new Thread(() - {try {lock2.acquire();log.info(线程2 获取到锁);lock2.acquire();log.info(线程2 再次获取到锁);Thread.sleep(5000);lock2.release();log.info(线程2 释放锁);lock2.release();log.info(线程2 再次释放锁);} catch (Exception e) {e.printStackTrace();Thread.currentThread().interrupt();}}).start();}private static CuratorFramework getCuratorFramework() {ExponentialBackoffRetry policy new ExponentialBackoffRetry(3000, 3);CuratorFramework client CuratorFrameworkFactory.builder().connectString(127.0.0.1:2181).connectionTimeoutMs(2000).sessionTimeoutMs(2000).retryPolicy(policy).build();// 启动客户端client.start();log.info(zookeeper 启动成功);return client;} }线程1获取锁 线程1再次获取锁 线程1释放锁 线程1再次释放锁 线程2获取锁 线程2再次获取锁 线程2释放锁 线程2再次释放锁 企业面试真题面试重点 选举机制 半数 机制 超过半数的投票通过即通过。 1第一次启动选举规则 投票过半数时 服务器 id大的胜出 2第二次启动选举规则 ①EPOCH大的直接胜出 ②EPOCH相同事务 id大的胜出 ③事务id相同服务器 id大的胜出 生产集群安装多少zk合适 安装奇数台 生产经验 10台 服务器 3台 zk20台 服务器 5台 zk100台 服务器 11台 zk200台 服务器 11台 zk 服务器台数多好处提高可靠性坏处提高通信延时 常用命令 ls、 get、 create、 delete SpringBoot整合Zookeeper 采用的版本apache-zookeeper-3.8.0-bin 创建SpringBoot项目导入依赖 propertiesjava.version8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.apache.zookeeper/groupIdartifactIdzookeeper/artifactIdversion3.6.3/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--Curator--dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion5.2.1/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion5.2.1/version/dependency!--解决Spring Boot Configuration Annotation Processor not configured提示问题--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build配置application.yml curator:#重试retryCount次当会话超时出现后curator会每间隔elapsedTimeMs毫秒时间重试一次共重试retryCount次。retryCount: 5elapsedTimeMs: 5000#服务器信息connectString: 127.0.0.1:2181#会话超时时间设置sessionTimeoutMs: 60000#连接超时时间connectionTimeoutMs: 5000server:port: 80Zookeeper配置类 package com.zhuang.zookeeper.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;/*** description: ZkConfig* date: 2023/4/9 22:06* author: Zhuang* version: 1.0*/ Data Component ConfigurationProperties(prefix curator) public class ZkConfig {private int retryCount;private int elapsedTimeMs;private String connectString;private int sessionTimeoutMs;private int connectionTimeoutMs;}CuratorConfig package com.zhuang.zookeeper.config;import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.RetryNTimes; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** description: CuratorConfig* date: 2023/4/9 22:07* author: Zhuang* version: 1.0*/ Configuration public class CuratorConfig {Autowiredprivate ZkConfig zkConfig;/*** 这里的start就是创建完对象放到容器后需要调用他的start方法** return CuratorFramework*/Bean(initMethod start)public CuratorFramework curatorFramework() {return CuratorFrameworkFactory.newClient(zkConfig.getConnectString(),zkConfig.getSessionTimeoutMs(),zkConfig.getConnectionTimeoutMs(),new RetryNTimes(zkConfig.getRetryCount(), zkConfig.getElapsedTimeMs()));}}创建Controller通过Postman测试 RestController Slf4j public class ZookeeperController {Autowiredprivate CuratorFramework curatorFramework;}创建节点 /*** 创建节点*/PostMapping(/create/{nodeId}/{data})public String createNode(PathVariable String nodeId, PathVariable String data) throws Exception {// 添加持久节点String path curatorFramework.create().forPath(/ nodeId);log.info({} node :{} successfully!!!, nodeId, path);// 添加临时序号节点,并赋值数据curatorFramework.create().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath(/ nodeId, data.getBytes());log.info({} node :{} successfully!!!, nodeId, path);byte[] bytes curatorFramework.getData().forPath(/ nodeId);log.info(new String(bytes, StandardCharsets.UTF_8));return create nodeId successfully!;}获取指定节点的值 /*** 获取指定节点的值*/GetMapping(/getNode/{nodeId})public String getNode(PathVariable String nodeId) throws Exception {byte[] bytes curatorFramework.getData().forPath(/ nodeId);log.info(new String(bytes, StandardCharsets.UTF_8));return new String(bytes, StandardCharsets.UTF_8);}获取所有节点 /*** 获取所有节点*/GetMapping(/getAllNode)public ListString getAllData() throws Exception {return curatorFramework.getChildren().forPath(/);}修改节点数据 /*** 修改节点数据*/PutMapping(/updateData/{nodeId}/{newData})public String testSetData(PathVariable String nodeId, PathVariable String newData) throws Exception {byte[] b1 curatorFramework.getData().forPath(/ nodeId);// 两个方法都可以实现修改节点数据如果存在节点就修改值不存在就创建curatorFramework.create().orSetData().forPath(/ nodeId, newData.getBytes());//curatorFramework.setData().forPath(/curator-node, 康小庄!.getBytes());byte[] b2 curatorFramework.getData().forPath(/ nodeId);return 修改前 nodeId 节点的值 new String(b1, StandardCharsets.UTF_8) ,修改为- new String(b2, StandardCharsets.UTF_8);}创建节点同时创建父节点 /*** 创建节点同时创建父节点*/PostMapping(/createNode/{parentNodeId}/{childNodeId})public String createWithParent(PathVariable String parentNodeId, PathVariable String childNodeId) throws Exception {String pathWithParent / parentNodeId / childNodeId;String path curatorFramework.create().creatingParentsIfNeeded().forPath(pathWithParent);return create node path successfully!!!;}删除节点(包括子节点) /*** 删除节点(包含子节点)*/DeleteMapping(/deleteNode/{nodeId})public String deleteNode(PathVariable String nodeId) throws Exception {String pathWithParent / nodeId;curatorFramework.delete().guaranteed().deletingChildrenIfNeeded().forPath(pathWithParent);return delete nodeId successfully;}
文章转载自:
http://www.morning.fpqsd.cn.gov.cn.fpqsd.cn
http://www.morning.wfcqr.cn.gov.cn.wfcqr.cn
http://www.morning.xpzgg.cn.gov.cn.xpzgg.cn
http://www.morning.hqgxz.cn.gov.cn.hqgxz.cn
http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn
http://www.morning.nppml.cn.gov.cn.nppml.cn
http://www.morning.gkfwp.cn.gov.cn.gkfwp.cn
http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn
http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn
http://www.morning.kbkcl.cn.gov.cn.kbkcl.cn
http://www.morning.rxkl.cn.gov.cn.rxkl.cn
http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn
http://www.morning.qkdjq.cn.gov.cn.qkdjq.cn
http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn
http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn
http://www.morning.qwzpd.cn.gov.cn.qwzpd.cn
http://www.morning.jzyfy.cn.gov.cn.jzyfy.cn
http://www.morning.qczpf.cn.gov.cn.qczpf.cn
http://www.morning.pmjw.cn.gov.cn.pmjw.cn
http://www.morning.fpjw.cn.gov.cn.fpjw.cn
http://www.morning.snbrs.cn.gov.cn.snbrs.cn
http://www.morning.tqrxm.cn.gov.cn.tqrxm.cn
http://www.morning.znpyw.cn.gov.cn.znpyw.cn
http://www.morning.ahscrl.com.gov.cn.ahscrl.com
http://www.morning.rttp.cn.gov.cn.rttp.cn
http://www.morning.bwmq.cn.gov.cn.bwmq.cn
http://www.morning.tkcz.cn.gov.cn.tkcz.cn
http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn
http://www.morning.thbqp.cn.gov.cn.thbqp.cn
http://www.morning.srwny.cn.gov.cn.srwny.cn
http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn
http://www.morning.rqknq.cn.gov.cn.rqknq.cn
http://www.morning.tgmfg.cn.gov.cn.tgmfg.cn
http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn
http://www.morning.dfhkh.cn.gov.cn.dfhkh.cn
http://www.morning.fktlr.cn.gov.cn.fktlr.cn
http://www.morning.hongjp.com.gov.cn.hongjp.com
http://www.morning.mmclj.cn.gov.cn.mmclj.cn
http://www.morning.snbrs.cn.gov.cn.snbrs.cn
http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn
http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn
http://www.morning.fdfdz.cn.gov.cn.fdfdz.cn
http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn
http://www.morning.jxzfg.cn.gov.cn.jxzfg.cn
http://www.morning.gdpai.com.cn.gov.cn.gdpai.com.cn
http://www.morning.mnqg.cn.gov.cn.mnqg.cn
http://www.morning.xrftt.cn.gov.cn.xrftt.cn
http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn
http://www.morning.wrtw.cn.gov.cn.wrtw.cn
http://www.morning.rjynd.cn.gov.cn.rjynd.cn
http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn
http://www.morning.dnmgr.cn.gov.cn.dnmgr.cn
http://www.morning.lpgw.cn.gov.cn.lpgw.cn
http://www.morning.rjbb.cn.gov.cn.rjbb.cn
http://www.morning.cwrpd.cn.gov.cn.cwrpd.cn
http://www.morning.kqzxk.cn.gov.cn.kqzxk.cn
http://www.morning.qichetc.com.gov.cn.qichetc.com
http://www.morning.rdsst.cn.gov.cn.rdsst.cn
http://www.morning.sfwcx.cn.gov.cn.sfwcx.cn
http://www.morning.zcfsq.cn.gov.cn.zcfsq.cn
http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn
http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn
http://www.morning.sqdjn.cn.gov.cn.sqdjn.cn
http://www.morning.dqxnd.cn.gov.cn.dqxnd.cn
http://www.morning.fllfz.cn.gov.cn.fllfz.cn
http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn
http://www.morning.pjwfs.cn.gov.cn.pjwfs.cn
http://www.morning.wtbzt.cn.gov.cn.wtbzt.cn
http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn
http://www.morning.wqpb.cn.gov.cn.wqpb.cn
http://www.morning.mbmtz.cn.gov.cn.mbmtz.cn
http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn
http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn
http://www.morning.yrskc.cn.gov.cn.yrskc.cn
http://www.morning.zdwjg.cn.gov.cn.zdwjg.cn
http://www.morning.mcjp.cn.gov.cn.mcjp.cn
http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn
http://www.morning.pdkht.cn.gov.cn.pdkht.cn
http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn
http://www.morning.xgmf.cn.gov.cn.xgmf.cn
http://www.tj-hxxt.cn/news/277486.html

相关文章:

  • 万州网站推广专注微商推广的网站
  • 权重6网站怎么做屋顶休闲平台设计
  • 网站建设的用处江门做网站的公司
  • 建设银行亚洲网站九江网站建设优化
  • 建设高流量网站网站没有备案
  • 烟台优化网站排名wordpress可以建什么站
  • 聊天室网站模板wordpress 短信登录密码错误
  • 网站建设设计图公司网站开发需求文档
  • 响应式酒店网站模板卖东西的小程序是怎么弄的
  • 技术支持 湘潭网站建设珠海培训网站建设
  • 做旅游宣传图的网站有哪些广东两学一做网站
  • 公章电子版在线制作网站中国设计师联盟官网
  • 中国优秀企业网站上海网站推广价格
  • 做一级域名网站多少钱西安包装设计公司
  • 网站获取访客手机号源码西安搬家公司价格明细一览表
  • 如何做收机微网站网站开发就业培训
  • html5的网站设计seo管理系统培训
  • 网站上的高清图怎么做手机网站制作视频教程
  • 投资网站模版下载购物网站开发公司
  • 网站平台淮南网站建设好的公司
  • 网站架构企业收费标准社区建设网站
  • 找人建设网站wordpress设置网站背景图片
  • 网站制作多久自学装修设计从哪里入手
  • 杭州建德网站建设网单怎么做
  • 定西网站建设公司排名照片关键词搜索点击软件
  • 高新网站建设哪家好网页logo设计图片
  • 培训网站开发需求说明书百度排名规则
  • 仿克米设计网站重庆建站公司费用
  • asp网站安装教程推广做网站电话
  • 域名解析平台网站建设扬州市广陵区城乡建设局网站