java - [Apache Curator] Как правильно закрыть куратор
Я пытаюсь реализовать резервную логику для моего соединения с Zookeeper с помощью Apache Curator, в основном у меня есть два набора строк подключения, и если я получаю состояние LOST на моем слушателе состояний, я пытаюсь повторно подключить мой клиент-куратор на другом наборе соединений строки. Я мог бы просто поместить все машины в одну строку подключения, но я хочу подключиться в аварийном режиме, только когда все машины для кластера по умолчанию отключены.
Проблема в том, что я не могу закрыть предыдущий клиент куратора, когда пытаюсь перейти на резервный кластер, я получаю сообщение LOG, в котором говорится, что куратор пытается восстановить соединение, даже после того, как я подключаюсь к резервному набору zookeepers. Ниже вы можете найти пример кода того, что я пытаюсь сделать:
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) на кураторе?
Благодарю.