java-[Apache Curator]如何正确关闭策展人

问题描述 投票:1回答:1

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

问题是,当我尝试切换到后备集群时,我无法关闭先前的策展人客户端,即使在连接了动物园管理员的后备集后,我仍然收到LOG消息,指出策展人正在尝试重新连接。在下面,您可以找到我想要做的代码示例:

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

和重新连接方法(会将lastHost更改为备用群集):

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

我可以成功连接新的连接字符串集(后备),但问题是以前的客户端继续尝试连接以前的连接字符串。

[查看close()方法,我看到策展人仅在客户端状态为STARTED的情况下才关闭事物,我认为这就是为什么策展人不断尝试连接上一个集群的原因。

是否可以在没有启动状态的情况下关闭策展人客户端?

如果没有,在策展人上实现该逻辑(后备Zookeeper服务器)的另一种方法?

谢谢。

java apache apache-zookeeper fallback apache-curator
1个回答
0
投票
@@ joaomedeiros95,您得到问题的答案了吗?我想处理相同的情况,当Zookeeper IP发生更改(作为群集升级的一部分)时,我的客户端无法切换到新IP。我关闭了现有的连接,并通过org.apache.curator.framework.state.ConnectionStateManager]出错。

会话暂停时已过去。注入会话期满。过去的毫秒:44122038。调整的会话超时毫秒:5000无法注入会话过期

此日志重复并填充日志。如何关闭连接并开始新的连接。我无法使用旧的connectionSting关闭前一个或打开新的连接。

© www.soinside.com 2019 - 2024. All rights reserved.