- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ZooKeeperWatch笔记
Watcher详解、接口 在 ZooKeeper 中, 接口类 Watcher 用于表示一个标注你的事件处理器,其定义了事件通知相关的逻辑,包含 KeeperState 和 EventType 两个枚举类,分别代表了通知状态和事件类型,同时定义了事件的回调方法:process(WatchedEvent event)Watcher 触发条件: 增、删、改 ( 重复修改也会触发,因为他只告诉你变更了,不告诉你变更多少,需要 C 自己去拿)abstract public ?void process ( WatchedEvent event )。 process() 是?Watch 接口中的回调方法。当 ZooKeeper 向客户端发送一个 Watcher 时间通知时,客户端就会对相应的 process 方法进行回调,从而实现对事件的处理。 like this:syncNodes()方法。??Watcher?设置是开发中最常见的,需要搞清楚watcher的一些基本特征,对于exists、getdata、getchild对于节点的不同操作会收到不同的?watcher信息对父节点的变更以及子节点的变更都不会触发watcher,而对watcher本身节点以及子节点的变更会触发watcher继续。ZooKeeper 使用?WatchedEvent?对象封装服务端事件并传递给 Watcher, 从而方便回调方法 process 对服务端事件进行处理。WatcherEvent?实体实现了序列化接口,因此可以用于网络传输。数据结构如下。Class WatcherEvent{ type:int state:int path:String}state=-112 会话超时状态state= -113 认证失败状态state= ?1 连接建立中state= 2 (暂时不清楚如何理解这个状态,ZOO_ASSOCIATING_STATE)state=3 连接已建立状态state= 999 无连接状态type=1 创建节点事件type=2 删除节点事件type=3 更改节点事件type=4 子节点列表变化事件type= -1 会话session事件type=-2 监控被移除事件Watcher 发送过程。 当服务端产生?WatchedEvent?事件之后,会调用 getWrapper 方法将自己包装成一个可序列化的?WatcherEvent?事件,以便于通过网络传输到客户端。客户端在接收到服务端的这个事件对象后,首先会将?WatcherEvent?事件还原成一个?WatchedEvent?事件。并传递给 process方法处理。 回调方法根据传入参数解析完整服务端事件。Watcher 发送的数据?? 无论是?WatcherEvent?还是?WatchedEvent,他对 ZooKeeper 服务端事件的封装都是极其简单的。 当 /Test/test1/1_1节点发生变更时,服务端会发送给客户端一个“ZNode数据变更“ 事件,客户端也只能接收到如下信息: KeeperState : SyncConnected EventType : NodeDataChanged Path : /zk-b? 也就是说,客户端无法直接从该事件中获取到对应数据节点的原始数据内容,以及变更后的新数据内容。而是客户端再次主动去重新获取数据。——这个也是 ZooKeeper 一个非常重要的特性。Watcher 工作机制服务端发送不处理逻辑、客户端发送并处理逻辑。客户端注册 Watcher? 创建一个?new?ZooKeeper() 客户端对象实例时,可以传入一个 Watcher .?new?ZooKeeper(String?connectString,int?sessionTimeout, Watcher?watcher)?? 这个Watcher 将作为整个 ZooKeeper 回话期间的默认 Watcher,会一直被保存在客户端 ZKWatchManager 的 defaultWatcher 中。 另外,ZooKeeper 客户端也可以通过?getData、 getChildren 和 exist 三个接口来向 ZooKeeper 服务器注册 Watcher。 列举个getData 例:??public?byte[]?getData(String?path,boolean?watch,?Stat?stat)??public?byte[]?getData(final?String?path,Watcher?watch,?Stat?stat)??第一个通过一个 boolean 参数来标识是否使用默认 Watcher 进行注册,具体注册逻辑与第二个接口一致。注册 Watcher 后? 在 get
原创力文档


文档评论(0)