利用zookeeper实现分布式运用服务器上下线的动态感知-简单程序
来源:互联网 发布:海岩是双性恋 知乎 编辑:程序博客网 时间:2024/06/05 11:20
简要分析:
1、服务器端将自己注册到zookeeper上,使用临时性序列节点
2、客户端通过zookeeper获取服务器端的状态信息
//1、服务器端代码
package cn.nyzc.testzk;
import java.io.IOException;
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;
public class TestZK01 {
private String connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";
int sessionTimeout = 2000;
ZooKeeper zkServer;
private String parentPath = "/servers";
//main方法。当作启动的线程
public static void main(String[] args) throws Exception {
TestZK01 zk01=new TestZK01();
//1 创建连接
zk01.inintZK();
//2 注册服务器
zk01.register(args[0]);
//3 业务方法
zk01.business(args[0]);
}
//创建连接
public void inintZK() throws IOException {
zkServer = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
}
});
}
// 注册服务器
public void register(String hostname) throws Exception {
// 往zookeeper上新建一个临时节点
String create = zkServer.create(parentPath + "/server", hostname.getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
// 打印一下
System.out.println(hostname + " is on line " + create);
}
//业务方法
public void business(String hostname) throws Exception{
System.out.println(hostname+" is working!");
//线程等待
Thread.sleep(Long.MAX_VALUE);
}
}
//======================================
//2、客户端代码
package cn.nyzc.testzk;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class TestZK02 {
private String connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";
int sessionTimeout = 2000;
ZooKeeper client;
private String parentPath = "/servers";
//线程公用,且不允许拷贝到线程栈区
private volatile List<String> serversList = new ArrayList<>();
//main方法。当作主线程
public static void main(String[] args) throws Exception {
TestZK02 zk02 = new TestZK02();
// 1创建连接
zk02.getConnect();
// 2 获取/servers下子节点信息
zk02.getServerList();
// 3 业务进程启动
zk02.business();
}
// 创建连接
public void getConnect() throws IOException {
client = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
//监听事件调用方法(一个监听调用一次)
@Override
public void process(WatchedEvent event) {
try {
getServerList();
} catch (KeeperException | InterruptedException e) {
e.printStackTrace();
}
}
});
}
// 获取/servers下的子节点信息
public void getServerList() throws KeeperException, InterruptedException {
// 获取路径下的所有子节点
List<String> children = client.getChildren(parentPath, true);
List<String> servers = new ArrayList<>();
for (String child : children) {
// 获取具体子节点的内容
byte[] data = client.getData(parentPath + "/" + child, false, null);
servers.add(new String(data));
}
//把数据装入到公用集合中
serversList = servers;
System.out.println(serversList);
}
// 业务功能
public void business() throws Exception {
System.out.println("client is working ...");
Thread.sleep(Long.MAX_VALUE);
}
}
- 利用zookeeper实现分布式运用服务器上下线的动态感知-简单程序
- ZooKeeper分布式应用系统服务器上下线动态感知简单程序
- zookeeper实现分布式应用系统服务器上下线动态感知程序、监听机制与守护线程
- 【ZooKeeper】分布式系统服务器上下线自动感知程序开发
- zookeeper 服务器动态上下线感知
- 通过Zookeeper动态感知服务器上下线[案例]
- 分布式应用系统服务器上下线动态感知程序开发学习笔记
- 动态感知服务器上下线
- zookeeper实时感知到主节点服务器的上下线
- 学习笔记:Zookeeper 应用案例(上下线动态感知)
- 利用ZooKeeper简单实现分布式锁
- 利用ZooKeeper简单实现分布式锁
- Zookeeper实现简单的分布式RPC框架
- Zookeeper分布式锁的简单实现
- Zookeeper实现服务上下线监控服务列表
- Zookeeper应用:服务端上下线
- 利用zookeeper实现简单的RPC框架
- Zookeeper-分布式锁简单实现
- 订单详情
- intelij idea 快速启动 springboot项目
- 【转】react-native集成支付宝
- Centos7下安装Tensorflow
- 网狐架构及代码讲解
- 利用zookeeper实现分布式运用服务器上下线的动态感知-简单程序
- 函数重载
- 联发科MT33xx GNSS模块固件升级流程
- Python-bool 类型
- 如何在phpstorm中显示多个项目呢?
- WinDbg-如何抓取dump文件
- RESTful 详解
- JRE 和 JDK 的区别详解(附JVM简单说明)
- 2017OSC年终盛典你所需知道的都在这里!