ZooKeeper监听机制

ZooKeeper的监听机制允许客户端对数据变化进行一次性监听,避免轮询查询。监听事件包括创建、删除、数据变化和孩子变化,仅触发一次。服务端维护数据和孩子监听队列,监听信息在客户端断开连接后会丢失,但在重连时自动重新注册。ZooKeeper保证监听的有序性和数据一致性。使用监听时应注意监听是一次性的,需要手动重新设置,并且在断链期间可能丢失事件。
摘要由CSDN通过智能技术生成

在ZooKeeper中,所有的读操作(getData,getChildren和exists)都可以设置监听。监听在某些场景下是非常有用的,当你关注某些数据的变化时,如果没有监听,你就只能不断的轮询查看数据是否发生了改变,而监听则可以避免轮询带来的开销。

设置监听

ZooKeeper的监听事件仅触发一次,监听事件异步通知客户端,并支持多种监听方式。

  1. 仅触发一次
    当数据改变时,一个监听事件被发送到客户端,并取消监听,除非客户端再次设置监听,否则不再监听。
    如果你调用了getData(“/znode1”, true)方法,第二个参数true表示设置监听,后续如果/znode1发生了改变或删除,客户端将收到监听消息。而如果/znode1再次发生改变,除非客户端执行了另一个设置监听的get操作,否则不会再收到监听消息。
    应用使用ZooKeeper的监听功能的通常方式为:
    1. 客户端对特定对象设置监听;
    2. 特定对象发生变化,服务端发送监听消息到客户端,并取消监听;
    3. 客户端收到监听消息,发起查询,并根据需要决定是否再次监听。
    ZooKeeper保证查询和监听是一个原子操作,客户端查询数据之后的所有数据变化都能收到监听。
  2. 发送到客户端
    要求操作必须成功返回到发起操作的客户端后,才能发送通知消息。监听被异步发送给监听者。ZooKeeper提供了顺序的保证:一个设置了监听的客户端在收到监听事件之前不会看到数据变化。
  3. 监听方式
    这涉及到数据改变的不同方式,ZooKeeper服务端维护了两个监听队列:数据监听队
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值