zookeeper实现服务器端监控代码实现
来源:互联网 发布:电流转换器淘宝 编辑:程序博客网 时间:2024/05/21 03:55
服务器端代码如下:
package com.lhc.clientmanager;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
/**
* 模拟服务器端,监听znode节点
* @author administrator
*
*/
public class ClientAuto {
// zk对象
static ZooKeeper zk;
// 用来阻止程序运行,参数表示在它释放所有等待线程之前需要发生的事件数
// 即执行countDown()方法后计数器减1,则await()方法返回
private static CountDownLatch countDown = new CountDownLatch(1);
// 创建连接相关信息
// 连接地址
static String connect = "master:2181,slave1:2181,slave2:2181";
// 连接超时时间
static int TIME_OUT = 2000;
// 连接监听器
Watcher connectWatcher = new Watcher() {
// 当客户端与Zookeeper服务建立连接后,该方法会被调用,参数是一个表示该连接的事件
public void process(WatchedEvent event) {
System.out.println("接收到zookeeper服务端通知,会话真正创建完成!");
}
};
// 节点是否存在监听器
Watcher existsWatcher = new Watcher() {
public void process(WatchedEvent event) {
// 子节点名称
String nodeName = event.getPath().split("/")[2];
try {
if (event.getType().toString().equals("NodeCreated")) {
System.out.println("节点" + nodeName + "上线!");
} else if (event.getType().toString().equals("NodeDeleted")) {
System.out.println("节点" + nodeName + "下线!");
} else if (event.getType().toString().equals("NodeDataChanged")) {
System.out.println("节点" + nodeName + "中的数据已经被修改");
} else if (event.getType().toString().equals("NodeChildrenChanged")) {
System.out.println("节点" + nodeName + "的子节点被修改");
} else {
System.out.println("event的信息:"+event);
}
// 重复注册watcher,否则监听器失效
// 因观察只能被触发一次,所以必须多次重复注册
// 如果有多个集群节点,可注册多集群节点
zk.exists("/nodeManager/tempNode1", existsWatcher);
zk.exists("/nodeManager/tempNode2", existsWatcher);
zk.exists("/nodeManager/tempNode3", existsWatcher);
} catch (Exception e) {
e.printStackTrace();
}
}
};
/**
* 初始化zk对象
* @throws Exception
*/
public void init() throws Exception {
zk = new ZooKeeper(connect, TIME_OUT, connectWatcher);
}
/**
* 向zk服务器注册集群节点,同时会给出上线通知
* @param zk
* @throws Exception
*/
public void checkExists(ZooKeeper zk) throws Exception {
zk.exists("/nodeManager/tempNode1", existsWatcher);
zk.exists("/nodeManager/tempNode2", existsWatcher);
zk.exists("/nodeManager/tempNode3", existsWatcher);
}
public static void main(String[] args) throws Exception {
ClientAuto auto = new ClientAuto();
auto.init();
auto.checkExists(zk);
countDown.await();
}
}
客户端代码如下:
package com.lhc.client;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
/**
* znode1节点
* @author administrator
*
*/
public class Client1 {
// 用来阻止程序运行
private static CountDownLatch countDown = new CountDownLatch(1);
/* 创建连接相关信息 */
// 连接地址
static String connect = "master:2181,slave1:2181,slave2:2181";
// 连接超时时间
static int TIME_OUT = 2000;
// zk对象
static ZooKeeper zk;
static Watcher watcher = new Watcher() {
public void process(WatchedEvent event) {
System.out.println("接收到zookeeper服务端通知");
System.out.println("此时zk对象信息:" + zk);
try {
// 判断指定父节点是否存在
Stat s = zk.exists("/nodeManager", true);
if (null == s) {
System.out.println("管理客户端节点不存在,先创建一个……");
// 模拟创建节点1
// Ids.OPEN_ACL_UNSAFE即将所有权限授予每个人
// CreateMode.EPHEMERAL节点类型为短暂,即客户端会话结束,节点消失
zk.create("/nodeManager", "nodeManager".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
}
System.out.println("node1开始向服务器端注册");
String path = zk.create("/nodeManager/tempNode1", "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println("node1向服务器端注册成功!");
} catch (Exception e) {
System.out.println("会话创建完成后创建临时节点时出现异常:" + e.getMessage());
}
}
};
public static void main(String[] args) throws Exception {
System.out.println("客户端1程序开始启动……");
zk = new ZooKeeper(connect, TIME_OUT, watcher);
System.out.println("zk对象创建完成!正在异步创建和zk服务器之间的连接:");
System.out.println("zk对象的信息:" + zk);
countDown.await();
}
}
模仿服务器端监听客户端连接状态,当客户端向管理节点注册时,触发监听,服务器收到监听信息,并告知该客户端已上线
- zookeeper实现服务器端监控代码实现
- SOCKET udp 服务器端代码实现
- Spring Ehcache代码实现监控
- JEE服务器端执行远程目标代码实现
- Linux Tcp客户端和服务器端代码实现
- 服务器端实现文件下载功能代码
- python服务器端收发请求的实现代码
- Zookeeper实现服务上下线监控服务列表
- 使用Zookeeper实现来监控服务器集群及负载状态
- 100303- ZooKeeper 配置管理代码实现案例
- zookeeper 主要应用场景及代码实现
- ZooKeeper分布式锁与代码实现
- Java代码实现文件夹变动监控
- .net中的socket异步通信实现--服务器端代码
- axis利用wsdl生成webservice服务器端和客户端代码实现
- 不依赖Spring的websocket 服务器端做客户端代码实现
- Java Spring Boot 服务器端断点续传功能支持 实现代码
- 用PHPStorm实现在本地实时编辑服务器端的代码
- 关于GCD的一些总结
- Android之MVP 模式:简单易懂的介绍方式
- 【原创】轻量级移动设备即时通讯技术MobileIMSDK的常见问题解答
- 文章标题
- Remove Element
- zookeeper实现服务器端监控代码实现
- 条件概率 全概率 贝叶斯公式
- ssh
- 详解虚拟机中为Linux添加硬盘
- 一只神奇的asp小马
- 【bzoj1009】[HNOI2008]GT考试
- XAMPP的使用——Java转PHP初步学习的过程
- Spring AOP切入点表达式
- 年终总结#我的2012年-“初”