Snailclimb / guide-rpc-framework

A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。)
https://gitee.com/SnailClimb/guide-rpc-framework
Other
3.97k stars 2.06k forks source link

zookeeper 的 watch 机制导致的问题 #71

Open ccqstark opened 2 years ago

ccqstark commented 2 years ago

guide 哥我在复习 zookeeper 的时候发现它的 watcher 机制会在触发一次后就删除掉监听器,也就是说现在只能对节点的一次改变进行监听,第二次就不生效了。 目前有两种解决方案:

  1. 在回调函数里再次注册一个新的监听器
  2. 删除本地缓存的服务表,这样下一次去读取服务列表的时候就会重新去 zookeeper 拉最新数据,类似 Redis 和 MySQL 做双写一致性时的操作
    PathChildrenCacheListener pathChildrenCacheListener = (curatorFramework, pathChildCacheEvent) -> {
    // List<String> serviceAddresses = curatorFramework.getChildren().forPath(servicePath);
    // SERVICE_ADDRESS_MAP.put(rpcServiceName, serviceAddresses);
    // 删除缓存以便下次从 zookeeper 拉取最新数据
    SERVICE_ADDRESS_MAP.remove(rpcServiceName);
    };
gtk123 commented 11 months ago

CuratorFramework好像可以反复注册监听器