1、目的
zookeeper是一个分布式服务管理框架。zookeeper提供了对客户端的通知,即在服务器端的节点有修改或者删除的时候,能够给客户端进行通知。

2、服务器端部署
服务器端部署zookeeper的步骤省略,具体的可以参看我前面的文章,部署也比较简单。

3、客户端接收通知代码

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

class Wa implements Runnable
{

    public void run() {
        //连接启动k
        try {
            ZooKeeper zk = new ZooKeeper("10.218.137.73:2181", 500000,new Watcher() {
                   // 监控所有被触发的事件
                     public void process(WatchedEvent event) {
                     System.out.println("changing...");
                   }
              });
        //设置监听器 
            Watcher wc = new Watcher() {

                public void process(WatchedEvent event) {
                    // TODO Auto-generated method stub
                    if (event.getType() == EventType.NodeDataChanged) {  
                        System.out.println("change"); 
                    }  
                    if (event.getType() == EventType.NodeDeleted){  
                        System.out.println("dele");  
                    }  
                    if(event.getType()== EventType.NodeCreated){ 
                        System.out.println("create"); 
                }
                }

            };
            //进行轮询,其中exists方法用来询问状态,并且设置了监听器,如果发生变化,则会回调监听器里的方法。
            while(true)
            {
                zk.exists("/jianghuiwen", wc);
            }



        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (KeeperException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



    }

}

public class Main {

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // TODO Auto-generated method stub

        Thread t = new Thread(new Wa());
        t.start();
    }

}

直接贴了代码,没有加上各种jar包,如果同学们要运行的话,需要先设置一下相关的jar包,应该就是Log4j和zookeeper的包。

4、测试
利用zookeeper自带的zkCli.sh或者用其他对节点进行修改的客户端进行修改节点,可以发现我们得到了下面的输出:
这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐