zk集群环境的安装:
zk的shell操作:
客户端连接:
运行 zkCli.sh –server ip 进入命令行工具。(在/bin下的目录)
history命令:查看历史执行命令
创建节点:
create [-s] [-e] path data
-s:表示顺序节点
-e表示临时节点
ex:
客户端创建的临时节点,只要客户端和服务端断开连接,临时节点就会消失
quit命令:客户端与服务端断开连接
watch监听器
读取节点:
与读取相关的命令有 ls 命令和 get 命令,ls 命令可以列出 Zookeeper 指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get 命令可以获取 Zookeeper 指定节点的数据内容和属性信息。
ls path [watch]
get path [watch]
设置节点值:
set命令
删除节点:
rmr:删除路径下所有节点包括子节点
delete:删除不包括子节点的节点
zookeeper的数据模型:既具有文件夹的特性又具有文件的特性
注:临时节点不能有子节点
zookeeper中的节点类型:
永久节点:
A.有序的永久节点
B.无序的永久节点
临时节点:
A.有序的临时节点
B.无序的临时节点
zookeeper的watch机制:
ZooKeeper 提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使他们能够做出相应的处理。ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能 。ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等。
总的来说可以概括 Watcher 为以下三个过程:客户端向服务端注册 Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况
监听器特性:
A.一次性触发;B.事件封装;C.先注册再触发
zookeeperJavaAPI操作:
A.导入jar包
jar包下载不下来怎么办
A.刷新工程,重新下载
B.删除maven仓库里面的 lastupdated的文件
C.换maven的版本
节点操作:
@Test
public void cn() throws Exception {
//定义重试机制
ExponentialBackoffRetry exponentialBackoffRetry = new ExponentialBackoffRetry(3000, 3);
//得到客户端
CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("gakki01:2181,gakki02:2181,gakki03:2181", exponentialBackoffRetry);
//开启客户端
curatorFramework.start();
curatorFramework.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/bigdata/hello/aaa","hello".getBytes());
//关闭客户端
curatorFramework.close();
}
创建临时节点:
@Test
public void createtempnode() throws Exception {
CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("gakki01:2181,gakki02:2181,gakki03:2181",new ExponentialBackoffRetry(3000,3));
curatorFramework.start();
curatorFramework.create().withMode(CreateMode.EPHEMERAL).forPath("/he","jk".getBytes());
Thread.sleep(8000);
curatorFramework.close();
}
watch机制:
@Test
public void watchNode() throws Exception {
CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("gakki03:2181",new ExponentialBackoffRetry(3000,3));
curatorFramework.start();
TreeCache treeCache = new TreeCache(curatorFramework,"/abc");
treeCache.getListenable().addListener(new TreeCacheListener() {
@Override
public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent event) throws Exception {
ChildData data = event.getData();
if(null != data){
TreeCacheEvent.Type type = event.getType();
switch (type){
case NODE_ADDED:
System.out.println("节点新增操作被监听到");
break;
case INITIALIZED:
System.out.println("初始化操作被监听到");;
break;
default:
System.out.println("打印些东西");
break;
}
}
}
});
treeCache.start();
Thread.sleep(50000000);
curatorFramework.close();
}
网络编程
概述:
通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络。在操作系统、网络管理软件及网络通信协议的管理和协调下,可以实现计算机之间的资源共享和信息的传递。网络编程是指用来实现网络互联的不同计算机上运行的程序间可以进行数据交换。对我们来说即如何用编程语言 java 实现计算机网络中不同计算机之间的通信。