【问题标题】:Apache Curator loses all watches after reconnectionApache Curator 重新连接后丢失所有手表
【发布时间】:2014-09-15 14:03:13
【问题描述】:

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

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

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);

谢谢,

【问题讨论】:

    标签: apache-zookeeper apache-curator


    【解决方案1】:

    如果连接发生变化,您的Watcher 应该会通知您。如果是这样,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 以帮助解决此确切行为 link
    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2017-09-08
    • 2020-12-05
    相关资源
    最近更新 更多