zk作为一款成熟的分布式协调框架,订阅-发布功能是很重要的一个。所谓订阅发布功能,其实说白了就是观察者模式。观察者会订阅一些感兴趣的主题,然后这些主题一旦变化了,就会自动通知到这些观察者。
zk的订阅发布也就是watch机制,是一个轻量级的设计。因为它采用了一种推拉结合的模式。一旦服务端感知主题变了,那么只会发送一个事件类型和节点信息给关注的客户端,而不会包括具体的变更内容,所以事件本身是轻量级的,这就是所谓的“推”部分。然后,收到变更通知的客户端需要自己去拉变更的数据,这就是“拉”部分。
watch机制
一、目标是谁?
zode /path (节点操作来触发watch)
1、创建
2、修改
3、删除
4、查询
5、是否存在
二、使用
2.1 创建一个对象
2.2 注册
2.2.1 查询时候去注册
public static void main(String[] args) throws KeeperException { try { // 连接 ZooKeeper connect = zookeeperConnection.connect("192.168.44.5:2181"); // 注册watch connect.getData("/alex",new GetMyWatch(),connect.exists("/alex",false)); // 因为是main方法,使用此方法保证线程不被停止 System.in.read(); } catch (Exception e) { e.printStackTrace(); } } /** * 自定义监听器 */ private static class GetMyWatch implements Watcher{ @Override public void process(WatchedEvent watchedEvent) { System.out.println(watchedEvent.getState()); System.out.println("getData 数据回调"); } }
修改此节点,观察watch是否被调用
可以观察到watch 被调用了,但是在这里有一个注意的地方,watch是一次性的,只会被调用一次,你在后面再次修改节点,watch是不会被调用的
2.3 触发
原文:https://www.cnblogs.com/alomsc/p/12836567.html