概述
服务端:
public class ZkTest { private ZooKeeper zooKeeper; public ZkTest() { init(); } private void init(){ try { ResourceBundle bundle = ResourceBundle.getBundle("zk"); String url=bundle.getString("zk.url"); Integer time=Integer.valueOf((String) bundle.getString("zk.timeout")); zooKeeper= new ZooKeeper(url, time, new Watcher() { @Override public void process(WatchedEvent event) { if(event.getType().equals(Event.EventType.NodeDataChanged)){ System.out.println(event.getPath()+"节点发生了改变"); } } }); } catch (IOException e) { e.printStackTrace(); } } public void createNode() throws KeeperException, InterruptedException { String path = zooKeeper.create("/root/server", "服务提供者".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); System.out.println("添加一个服务提供者:"+path); } public static void main(String[] args) { ZkTest zkServer = new ZkTest(); try { for (int i=0;i<5;i++){ zkServer.createNode(); } Thread.sleep(Long.MAX_VALUE); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }消费端:
public static void main(String[] args) throws InterruptedException { ZkClient zkClient = new ZkClient(new ZkConnection(CONNECT_ADDR, SESSION_TIMEOUT)); zkClient.subscribeChildChanges("/root", new IZkChildListener() { @Override public void handleChildChange(String s, List<String> list) throws Exception { System.out.println(s+"的子节点发生改变"+ Arrays.toString(list.toArray())); } }); Thread.sleep(Integer.MAX_VALUE); }
测试:先启动消费端,在启动服务端
服务端生成五个临时节点
消费端获取了服务端的节点
关闭服务端,临时节点会自动删除,消费端会自动监听到
最后
以上就是慈祥小馒头为你收集整理的zookeeper实现注册中心(demo)的全部内容,希望文章能够帮你解决zookeeper实现注册中心(demo)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复