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) на кураторе?

Благодарю.

0 ответов

Другие вопросы по тегам