美文网首页
Zookeeper-watch

Zookeeper-watch

作者: 麦大大吃不胖 | 来源:发表于2020-12-19 15:29 被阅读0次

    by shihang.mai

    1. 场景

    场景:假如有这么一个场景,client1 down后client2要做某些逻辑
    有以下两个方案

    1. client2直接定时监听client1心跳,client1 down,然后自己做逻辑(下图绿色部分)
    2. 利用zk的watch机制(下图黑色部分)
      结论:显然选择zk方案,因为比定时监听及时.
    zk的watch机制

    2. watch机制

    1. 假设有一个目录/ooxx
    2. Client1在该目录下创建一个临时节点a,基于session,代表自己,如图所示的node节点,Client1挂掉,session消失,会产生事件.
    3. Clinet2通过统一试图(zk集群),获取到node节点,并watch event事件
    4. 如果Client1挂掉,那么事件触发,就会callback Client2

    2.1 watch有两类

    1. 在new Zookeeper(ip,session timeout,watch)传入的watch,是session级别的,就是说连接状态,和path、node没关系的
    public void process(WatchedEvent event) {
        switch (event.getState()) {
            case Unknown:
                break;
            case Disconnected:
                break;
            case NoSyncConnected:
                break;
            case SyncConnected:
                break;
            case AuthFailed:
                break;
            case ConnectedReadOnly:
                break;
            case SaslAuthenticated:
                break;
            case Expired:
                break;
        }
    
        switch (event.getType()) {
            case None:
                break;
            case NodeCreated:
                break;
            case NodeDeleted:
                break;
            case NodeDataChanged:
                break;
            case NodeChildrenChanged:
                break;
        }
    }
    
    1. 针对node节点事件的watch,并且是一次性的,要连续监听的话,需要重新注册

    注意:
    watch注册只发生在读命令调用,如get exists。写命令是产生事件的,所以没watch。

    zk.getdata("/ooxx",true,stat),其中第二个参数为true时,注册的是new zookeeper时的watch

    相关文章

      网友评论

          本文标题:Zookeeper-watch

          本文链接:https://www.haomeiwen.com/subject/xmfxwktx.html