服务端:
public class OlioProvider {
ZooKeeper zk = null;
public void connectZK() throws Exception {
zk = new ZooKeeper("cts01:2181,cts02:2181", 2000,null);
}
public void registServerInfo() throws Exception {
String hostName = InetAddress.getLocalHost().getHostName();
String path = zk.create("/servers/server", (hostName+":9898").getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println("本服务器注册的节点为: " + path);
}
public void handleService() throws Exception {
ServerSocket ss = new ServerSocket(9898);
System.out.println("打开9898端口,开始接收消费者请求,处理业务.......");
while(true) {
ss.accept();
}
}
public static void main(String[] args) throws Exception {
OlioProvider olio = new OlioProvider();
// 连接 zk
olio.connectZK();
// 注册信息
olio.registServerInfo();
// 处理业务
olio.handleService();
}
}
客户端:
public class OlioConsumer {
ZooKeeper zk = null;
List<String> servers = null;
public void connectZK() throws Exception {
zk = new ZooKeeper("cts01:2181,cts02:2181,cts03:2181", 2000, new Watcher() {
@Override
public void process(WatchedEvent event) {
if(event.getState() == KeeperState.SyncConnected && event.getType() == EventType.NodeChildrenChanged)
try {
getOnlineServers();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void getOnlineServers() throws Exception {
List<String> serverList = new ArrayList<>();
// 获取子节点并注册监听
List<String> children = zk.getChildren("/servers", true);
for (String child : children) {
byte[] data = zk.getData("/servers/" + child, false, null);
String server = new String(data);
serverList.add(server);
}
System.out.println("获取了一次在线服务器列表,查到的服务器有:" + serverList);
servers = serverList;
}
public void sendRequest() throws Exception {
Random random = new Random();
while (true) {
if(servers.size()==0) {
continue;
}
int nextInt = random.nextInt(servers.size());
String server = servers.get(nextInt);
System.out.println("挑选了一台服务器: " + server);
Thread.sleep(2000);
}
}
public static void main(String[] args) throws Exception {
OlioConsumer olio = new OlioConsumer();
// 连接zookeeper
olio.connectZK();
// 获取当前在线的服务器,注册监听
olio.getOnlineServers();
// 处理业务
olio.sendRequest();
}
}
利用zookeeper开发简单的框架
最新推荐文章于 2023-12-20 13:47:33 发布