首页 > 解决方案 > java - [Apache Curator] 如何正确关闭 curator

问题描述

我正在尝试使用 Apache Curator 在与 Zookeeper 的连接上实现回退逻辑,基本上我有两组连接字符串,如果我在状态侦听器上收到 LOST 状态,我会尝试在另一组连接上重新连接我的 curator 客户端字符串。我可以简单地将所有机器放在同一个连接字符串上,但我只想在默认集群的所有机器都脱机时连接回退。

问题是,当我尝试更改为备用集群时,我无法关闭以前的 curator 客户端,我不断收到 LOG 消息说 curator 正在尝试重新连接,即使在我连接到 zookeepers 的备用集之后也是如此。您可以在下面找到我正在尝试做的代码示例:

final ConnectionStateListener listener = (client1, state) -> {
    if (state == ConnectionState.LOST) {
        reconnect();
    }
};

以及reconnect方法(将lastHost改为fallback集群):

if (client != null) {
    client.close();
}
...
client = CuratorFrameworkFactory.newClient(
        lastHost,
        sessionTimeout,
        connectionTimeout,
        retryPolicy);
...
client.start()

我可以成功连接新的连接字符串集(回退),但问题是以前的客户端一直尝试连接以前的连接字符串。

查看close()方法,我看到 curator 仅在客户端状态为 STARTED 时才关闭事物,我认为这就是 curator 一直尝试连接上一个集群的原因。

有没有办法在没有 STARTED 状态的情况下关闭()策展人客户端?

如果没有,是否有另一种方法可以在 curator 上实现此逻辑(后备 Zookeeper 服务器)?

谢谢。

标签: javaapacheapache-zookeeperfallbackapache-curator

解决方案


推荐阅读