guide-rpc-framework
guide-rpc-framework copied to clipboard
zookeeper 的 watch 机制导致的问题
guide 哥我在复习 zookeeper 的时候发现它的 watcher 机制会在触发一次后就删除掉监听器,也就是说现在只能对节点的一次改变进行监听,第二次就不生效了。 目前有两种解决方案:
- 在回调函数里再次注册一个新的监听器
- 删除本地缓存的服务表,这样下一次去读取服务列表的时候就会重新去 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);
};
CuratorFramework好像可以反复注册监听器