需求:某分布式系统中,主节点有多台,可以动态上下线,任意一台客户端都能实时感知到主节点服务器的上下线
实现思路:
- 服务器上线后,就在zookeeper集群上注册(要在zookeeper集群上创建一个临时node,以便服务器下线时就可以在zookeeper集群上删掉该临时node)。
- 客户端上线后,使用getChildren() 获取当前在线服务器列表,并注册监听。
- 当服务器下线后,zookeeper集群上该临时节点就会删掉,服务器下线事件通知客户端。
- 客户端在process()中,再重新获取在线服务器列表,并重新注册监听。
服务器端注册代码:
package com.allen.zookeeper01;
import org.apache.zookeeper.*;
import java.io.IOException;
public class DistributeServer {
private String connectString = "hadoop02:2181,hadoop03:2181,hadoop04:2181";
private int sessionTimeout = 2000;
private ZooKeeper zk;
public static void main(String[] args) {
DistributeServer server = new DistributeServer();
// 连接zookeeper集群连接
try {
server.getConnect();
} catch (IOException e)