Apache zookeeper Apache管理员在重新连接后丢失所有手表

Apache zookeeper Apache管理员在重新连接后丢失所有手表,apache-zookeeper,apache-curator,Apache Zookeeper,Apache Curator,我在我的项目中使用Apache Curator。在CuratorFramework与ZooKeeper服务器失去连接后,它会自动重新连接,但它似乎丢失了我设置的所有手表,我再也没有收到任何通知。如果连接未断开并重新启动,则监视将按预期工作 这是馆长的错误还是我做错了什么? 设置手表的代码如下所示: CuratorFramework framework = CuratorFrameworkFactory.newClient(connectString, SESSION_TIMEOUT_MS, 0,

我在我的项目中使用Apache Curator。在CuratorFramework与ZooKeeper服务器失去连接后,它会自动重新连接,但它似乎丢失了我设置的所有手表,我再也没有收到任何通知。如果连接未断开并重新启动,则监视将按预期工作

这是馆长的错误还是我做错了什么? 设置手表的代码如下所示:

CuratorFramework framework = CuratorFrameworkFactory.newClient(connectString, SESSION_TIMEOUT_MS, 0, new ExponentialBackoffRetry(CONNECT_TIMEOUT_MS, CONNECT_RETRY_COUNT));
framework.start();
framework.getChildren().usingWatcher(watcher).forPath(path);

谢谢,

如果连接发生变化,您的
观察者应通知您。如果是这样,则
WatchedEvent
上的
EventType
将是
None
,可以借此机会重新启动手表:

@Override
public void process(WatchedEvent event) {
    if (event.getType == Event.EventType.None && event.getState() == Event.KeeperState.SyncConnected){
        framework.getChildren().usingWatcher(this).forPath(path);
...

我只是偶然发现了这个问题,并想补充一下,在当前版本(4.2.0)中,您可以注册
ConnectionStateListener
,以帮助实现这一精确行为