温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

zookeeper中如何实现事件监听Watcher

发布时间:2021-11-24 09:29:22 来源:亿速云 阅读:234 作者:小新 栏目:编程语言

小编给大家分享一下zookeeper中如何实现事件监听Watcher,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Watcher是zookeeper的事件监听机制,今天我们来看看Watcher类的代码都包含了什么内容?

Watcher

Watcher是一个接口,定义了process方法,需要子类实现。其代表了实现Watcher接口时必须实现的的方法,即定义进行处理,WatchedEvent表示观察的事件。

abstract public void process(WatchedEvent event);

内部类

1、Event接口

表示事件代表的状态,其包含了KeeperState和EventType两个内部枚举类。

KeeperState

KeeperState是一个枚举类,其定义了在事件发生时Zookeeper所处的各种状态,其还定义了一个从整型值返回对应状态的方法fromInt。

@InterfaceAudience.Public     public interface Event {         /**          * Enumeration of states the ZooKeeper may be at the event          */         @InterfaceAudience.Public         public enum KeeperState {             /** Unused, this state is never generated by the server */             //未知状态,服务器不再产生此状态             @Deprecated             Unknown (-1),             /** The client is in the disconnected state - it is not connected              * to any server in the ensemble. */             //断开             Disconnected (0),             /** Unused, this state is never generated by the server */             //未同步连接,不再使用,服务器不会产生此状态             @Deprecated             NoSyncConnected (1),             /** The client is in the connected state - it is connected              * to a server in the ensemble (one of the servers specified              * in the host connection parameter during ZooKeeper client              * creation). */             //同步连接状态             SyncConnected (3),             /**              * Auth failed state              */             //认证失败状态             AuthFailed (4),             /**              * The client is connected to a read-only server, that is the              * server which is not currently connected to the majority.              * The only operations allowed after receiving this state is              * read operations.              * This state is generated for read-only clients only since              * read/write clients aren't allowed to connect to r/o servers.              */             //只读连接状态             ConnectedReadOnly (5),             /**               * SaslAuthenticated: used to notify clients that they are SASL-authenticated,               * so that they can perform Zookeeper actions with their SASL-authorized permissions.               */             //SASL认证通过状态             SaslAuthenticated(6),             /** The serving cluster has expired this session. The ZooKeeper              * client connection (the session) is no longer valid. You must              * create a new client connection (instantiate a new ZooKeeper              * instance) if you with to access the ensemble. */             //过期状态             Expired (-112),             /**               * The client has been closed. This state is never generated by              * the server, but is generated locally when a client calls              * {@link ZooKeeper#close()} or {@link ZooKeeper#close(int)}              */             //关闭             Closed (7);             //代表状态的整型值             private final int intValue;     // Integer representation of value                                             // for sending over wire             KeeperState(int intValue) {                 this.intValue = intValue;             }             public int getIntValue() {                 return intValue;             }             //从整型构造相应的状态             public static KeeperState fromInt(int intValue) {                 switch(intValue) {                     case   -1: return KeeperState.Unknown;                     case    0: return KeeperState.Disconnected;                     case    1: return KeeperState.NoSyncConnected;                     case    3: return KeeperState.SyncConnected;                     case    4: return KeeperState.AuthFailed;                     case    5: return KeeperState.ConnectedReadOnly;                     case    6: return KeeperState.SaslAuthenticated;                     case -112: return KeeperState.Expired;                     case   7: return KeeperState.Closed;                     default:                         throw new RuntimeException("Invalid integer value for conversion to KeeperState");                 }             }         }
EventType

EventType是一个枚举类,其定义了事件的类型(如创建节点、删除节点等事件),同时,其还定义了一个从整型值返回对应事件类型的方法fromInt。

 @InterfaceAudience.Public         public enum EventType {             //无             None (-1),             //结点创建             NodeCreated (1),             //结点删除             NodeDeleted (2),             //结点数据变化             NodeDataChanged (3),             //子结点变化             NodeChildrenChanged (4),             //监听移除             DataWatchRemoved (5),             //子结点监听移除             ChildWatchRemoved (6);             private final int intValue;     // Integer representation of value                                             // for sending over wire             EventType(int intValue) {                 this.intValue = intValue;             }             public int getIntValue() {                 return intValue;             }             //从整型构造相应的事件             public static EventType fromInt(int intValue) {                 switch(intValue) {                     case -1: return EventType.None;                     case  1: return EventType.NodeCreated;                     case  2: return EventType.NodeDeleted;                     case  3: return EventType.NodeDataChanged;                     case  4: return EventType.NodeChildrenChanged;                     case  5: return EventType.DataWatchRemoved;                     case  6: return EventType.ChildWatchRemoved;                     default:                         throw new RuntimeException("Invalid integer value for conversion to EventType");                 }             }                    }

2、枚举类WatcherType

监听器类型枚举

@InterfaceAudience.Public     public enum WatcherType {         //子监听器         Children(1),          //数据监听         Data(2),          //任意         Any(3);         // Integer representation of value         private final int intValue;         private WatcherType(int intValue) {             this.intValue = intValue;         }         public int getIntValue() {             return intValue;         }                 //整数到类型的转换         public static WatcherType fromInt(int intValue) {             switch (intValue) {             case 1:                 return WatcherType.Children;             case 2:                 return WatcherType.Data;             case 3:                 return WatcherType.Any;             default:                 throw new RuntimeException(                         "Invalid integer value for conversion to WatcherType");             }         }     }

WatchedEvent

/**      * Create a WatchedEvent with specified type, state and path      */     public WatchedEvent(EventType eventType, KeeperState keeperState, String path) {         this.keeperState = keeperState;         this.eventType = eventType;         this.path = path;     }

WatchedEvent类包含了三个属性,分别代表事件发生时Zookeeper的状态、事件类型和发生事件所涉及的节点路径。

以上是“zookeeper中如何实现事件监听Watcher”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI