zookeeper 协调服务-更新server地址列表
5台分布式zookeeper集群UserClient.java
package putsoft.com.server;
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 UserClient {
public static String root="/group";
public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181";
public static ZooKeeper zookeeper;
public Watcher wacher=new NodeWatcher();
private static List<String> hostList=new ArrayList<String>();
public UserClient() throws IOException, KeeperException, InterruptedException{
zookeeper=new ZooKeeper(UserClient.ZK_LIST, 5000,new Watcher(){
public void process(WatchedEvent event) {
if(Watcher.Event.KeeperState.SyncConnected==event.getState()){
if(event.getType()==Watcher.Event.EventType.None)
System.out.println("client is running");
}
}
});
zookeeper.getChildren(root,wacher);
}
public static void updateHostConfig(WatchedEvent event) throws Exception{
hostList.clear();
if(event.getType()==Watcher.Event.EventType.NodeChildrenChanged
&&event.getPath().equals(root)){
System.out.println("server node changed");
List<String> nodes=zookeeper.getChildren(root,true);
String value=null;
for(String str:nodes){
byte[] data = zookeeper.getData(root + "/" + str, false, null);
value=new String(data,"utf-8");
hostList.add(value);
}
print(hostList);
}
}
public static void print(List<String> list){
System.out.print("[");
for(String str:list){
System.out.print(str+"");
}
System.out.println("]");
}
public static void main(String[] args) throws Exception {
new UserClient();
Thread.sleep(Long.MAX_VALUE);
}
class NodeWatcher implements Watcher{
public void process(WatchedEvent event) {
try {
UserClient.updateHostConfig(event);
zookeeper.getChildren(root,wacher);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
UserServer.java
package putsoft.com.server;
import java.util.Calendar;
import java.util.Random;
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 UserServer {
public static String root="/group";
public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181";
private ZooKeeper zkeeper;
public UserServer(){
final String address=UserServer.gethost();
try{
zkeeper=new ZooKeeper(UserServer.ZK_LIST, 2000, new Watcher() {
public void process(WatchedEvent event) {
if(event.getState()==Watcher.Event.KeeperState.SyncConnected){
if(event.getType()==Watcher.Event.EventType.None){
try {
zkeeper.create(root+"/"+address,address.getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
} catch ( Exception e) {
e.printStackTrace();
}
}
}
}
});
}catch(Exception e){
e.printStackTrace();
}
}
public static String gethost(){
Calendar calendar=Calendar.getInstance();
return "10.172."+calendar.get(Calendar.SECOND)+"."+new Random().nextInt(255);
}
public static void main(String[] args) throws Exception{
new UserServer();
Thread.sleep(Long.MAX_VALUE);
}
}
执行结果
client is running
server node changed
server node changed
server node changed
server node changed
server node changed
server node changed
server node changed
server node changed
server node changed
server node changed
[]
页:
[1]