陕西省和城乡建设厅网站,wordpress ck-video,长春关键词优化排名,外国老头做中文网站要执行API操作需要在idea中创建maven项目 #xff08;改成自己的阿里仓库#xff09;导入特定依赖 添加日志文件 上边操作做成后就可以进行一些API的实现了 目录 导入maven依赖#xff1a;
创建日志文件#xff1a;
创建API客户端#xff1a;
#xff08;1#xff09… 要执行API操作需要在idea中创建maven项目 改成自己的阿里仓库导入特定依赖 添加日志文件 上边操作做成后就可以进行一些API的实现了 目录 导入maven依赖
创建日志文件
创建API客户端
1创建全局变量
2初始化init:
3创建节点create:
4监听API
5检测节点是否存在
写数据原理
(1)写流程之写入请求直接发送给Leader节点:
2写流程之写入请求发送给follower节点 导入maven依赖
dependencies dependency groupIdjunit/groupId artifactIdjunit/artifactId versionRELEASE/version /dependency dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-core/artifactId version2.8.2/version
/dependency dependency groupIdorg.apache.zookeeper/groupId artifactIdzookeeper/artifactId version3.5.7/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%n 创建API客户端
1创建全局变量 String connectStringhadoop102:2181,hadoop103:2181,hadoop104:2181;int sessionTimeout2000;ZooKeeper zkClientnull;
String connectString---要连接那个zookeeper,
int sessionTimeout ---延迟时间
ZooKeeper zkClient ---表示要创建的客户端 申请为全局变量有助于后边各方法的调用
2初始化init: Before
public void init() throws Exception {// Watcher watcher ---监听器zkClient new ZooKeeper(connectString, sessionTimeout, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {ListString children null;System.out.println(-------------------------------);try {children zkClient.getChildren(/, true);} catch (KeeperException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}for (String child : children) {System.out.println(child);}}});
}
Befor注解在此不在解释不会可看本人前面文章Java注解篇
首先初始化了一个zookeeper的客户端对象
重写了process方法这个方法在不使用监听器的时候可以不写代码
在开启监听器的时候可以听后续监听器API
由于监听器是调用一次只能使用一次不能实时监听所以我们要在初始化方法里添加监听逻辑process方法就会在每次所监听的数据发生改变的时候调用该方法我们在创建客户端对象的时候为该对象设置了监听器从而在删除的时候也会触发监听
3创建节点create:
Test
public void create() throws Exception {//String path,---在那个节点下创建节点// byte[] data, ----节点数据// ListACL acl,----权限// CreateMode createMode)----创建节点的类型String nodecreate zkClient.create(/atguigu,tangxiaocong.getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}
4监听API
Testpublic void getChildren() throws Exception {//String path----监听路径, boolean watch---设置监听器为true//true注册一次监听记不起来就去看监听原理就只能生效一次所以在init哪里就需要添加注册ListString children zkClient.getChildren(/, true);for (String child : children) {System.out.println(child);}// 延时阻塞--实时监控Thread.sleep(Long.MAX_VALUE);}
5检测节点是否存在 Test//查看节点是否存在public void exists() throws InterruptedException, KeeperException {//关闭监听Stat exists zkClient.exists(/atguigu, false);System.out.println(existsnull?not exist:exist);}
写数据原理
(1)写流程之写入请求直接发送给Leader节点: 1.客户端向leader发出写请求 2.leader接收到写请求会通知靠近它的follower执行写请求 3.follower回应给leader三台服务器现在已经有两台做出了回应大于1/2就会开始进行写操作让后再处理后续服务器---效率高 4.现在得出的回应大于1/2则leader对客户端给出回应 5.leader会继续给其他的follower发送写请求 6.follower得到请求给出回应
2写流程之写入请求发送给follower节点 1. 客户端向follower发出写请求 2.写请求转发从follower需要转请求给leader转请求后于上述操作相似 3.先通知转发请求的follower执行写请求 4.follower对leader的请求做出回应已经超过半数服务器做出回应则执行写操作 5.leader做出回应返回给转发请求的follower 6.该follower返回给客户端Client 7.leader通知其他follower执行写请求 8.做出回应后重复5.6步骤