利用zookeeper开发简单的框架

服务端:

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();
	}


}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值