У меня работает автономный сервер zookeeper.
client = CuratorFrameworkFactory.newClient(zkHostPorts, retryPolicy);
client.start();
assertThat(client.checkExists().forPath("/")).isNotNull(); // working
listener = new LeaderSelectorListenerAdapter() {
@Override
public void takeLeadership(CuratorFramework client) throws Exception {
System.out.println("This method is never called! :( ");
Thread.sleep(5000);
}
};
String path = "/somepath";
leaderSelector = new LeaderSelector(client, path, listener);
leaderSelector.autoRequeue();
leaderSelector.start();
Я успешно подключаюсь к серверу, определяю слушателя и начинаю выборы лидера.
Примечание: есть только 1 клиент.
Но мое клиентское приложение никогда не берет лидерства. Я не могу понять, что я делаю неправильно. Также это тривиальный сценарий с одним клиентом. Не должен ли клиент уже быть лидером
EDIT:
Это работает, если я использую TestingServer из библиотеки кураторских тестов вместо запуска моего сервера Zookeeper, как показано ниже -
TestingServer server = new TestingServer();
client = CuratorFrameworkFactory.newClient(server.getConnectString(), retryPolicy);
...
Значит ли это, что с моим сервером zookeeper что-то не так?
Это мой zoo.cfg -
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/ex1
clientPort=2181
Кроме того, сервер работает нормально, так как я могу подключиться к нему с помощью cli и могу создавать / удалять zNodes.