java - [Apache Curator] Как правильно закрыть куратор - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь реализовать резервную логику для моего соединения с 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()

Iможет успешно подключиться к новому набору строк подключения (запасной вариант), но проблема в том, что предыдущий клиент продолжает пытаться подключиться к предыдущим строкам подключения.

Глядя на метод close(), я увидел, что куратор только закрываетсяесли у клиента состояние STARTED, думаю, именно поэтому куратор продолжает пытаться подключиться к предыдущему кластеру.

Есть ли способ закрыть () клиент куратора, не имея на нем состояния STARTED?

Если нет, есть ли другой способ реализовать эту логику (резервные серверы zookeeper) на кураторе?

Спасибо.

...