泰安正规网站建设公司电话,夏津网站开发,百度上面做企业网站怎么做,黑彩网站建设运营前置知识#xff1a; Zookeeper学习笔记#xff08;1#xff09;—— 基础知识-CSDN博客 Zookeeper学习笔记#xff08;2#xff09;—— Zookeeper API简单操作-CSDN博客 Zookeeper 服务器动态上下线监听案例
需求分析
某分布式系统中#xff0c;主节点可以有多台 Zookeeper学习笔记1—— 基础知识-CSDN博客 Zookeeper学习笔记2—— Zookeeper API简单操作-CSDN博客 Zookeeper 服务器动态上下线监听案例
需求分析
某分布式系统中主节点可以有多台可以动态上下线任意一台客户端都能实时感知到主节点服务器的上下线 具体实现
首先创建节点serverscreate /servers servers
服务器向zookeeper注册的代码
package com.why.zkCase;import org.apache.zookeeper.*;
import org.junit.Before;import java.io.IOException;//服务端向zookeeper注册
public class DistributeServer {private static String connetString hadoop102:2181,hadoop103:2181,hadoop104:2181; //客户端连接ipprivate static int sessionTimeout 2000; //超时时间private ZooKeeper zkClient null; //客户端对象private String parentNode /servers; //父节点路径Beforepublic void getConnect() throws IOException {zkClient new ZooKeeper(connetString, sessionTimeout, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {//收到事件通知后的回调函数System.out.println(事件类型: watchedEvent.getType());System.out.println(事件路径: watchedEvent.getPath());}});}//注册服务器public void registServer(String hostname) throws InterruptedException, KeeperException {String create zkClient.create(parentNode /server, hostname.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);System.out.println(hostname is online create);}//业务逻辑public void business(String hostname) throws Exception {System.out.println(hostname is working ...);Thread.sleep(Long.MAX_VALUE);}public static void main(String[] args) throws Exception {// 1 获取 zk 连接DistributeServer server new DistributeServer();server.getConnect();// 2 利用 zk 连接注册服务器信息server.registServer(args[0]);// 3 启动业务功能server.business(args[0]);}
}客户端代码
package com.why.zkCase;import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.junit.Before;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;//客户端
public class DistributeClient {private static String connetString hadoop102:2181,hadoop103:2181,hadoop104:2181; //客户端连接ipprivate static int sessionTimeout 2000; //超时时间private ZooKeeper zkClient null; //客户端对象private String parentNode /servers; //父节点路径//创建到zk的客户端连接Beforepublic void getConnect() throws IOException {zkClient new ZooKeeper(connetString, sessionTimeout, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {//收到事件通知后的回调函数System.out.println(事件类型: watchedEvent.getType());System.out.println(事件路径: watchedEvent.getPath());// 再次启动监听try {getServerList();} catch (Exception e) {e.printStackTrace();}}});}//获取服务器列表信息public void getServerList() throws InterruptedException, KeeperException {//获取服务器子节点信息并对父节点进行监听ListString children zkClient.getChildren(parentNode, true);//存储服务器信息列表ArrayListString servers new ArrayList();//遍历所有节点获取主机名称信息for (String child : children){byte[] data zkClient.getData(parentNode / child, false, null);servers.add(new String(data));}//打印服务器列表信息System.out.println(servers);}// 业务功能public void business() throws Exception{System.out.println(client is working ...);Thread.sleep(Long.MAX_VALUE);}public static void main(String[] args) throws Exception {// 1 获取 zk 连接DistributeClient client new DistributeClient();client.getConnect();// 2 获取 servers 的子节点信息从中获取服务器信息列表client.getServerList();// 3 业务进程启动client.business();}
}测试
命令行操作
启动DistributeClient客户端
在zk的命令行中新建节点create -e -s /servers/hadoop103 hadoop103
在idea的控制台可以看到 删除hadoop103delete /servers/hadoop1030000000001
可以看到 idea操作
启动 DistributeClient 客户端
启动 DistributeServer 服务 添加参数 然后启动
可以看到 同时client也可以监听到服务器上线通知