LeaderSelectorListener的takeLeadership()方法未被调用

时间:2018-05-02 09:05:06

标签: java apache-zookeeper apache-curator

我有一个独立的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();

我正在成功连接服务器,定义一个监听器并开始领导选举。

注意:只有一个客户。

但我的客户端应用程序永远不会发挥领导作用。我无法弄清楚我做错了什么。这也是一个简单的单一客户端场景。客户不应该是领导者

修改 如果我使用curator-test库中的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连接到它并且能够创建/删除zNode。

0 个答案:

没有答案