javaapache-zookeeperapache-curator

How to check programmatically if Zookeeper is running?


I am using CuratorFramework (I'm still a newbie) in order to connect to a Zookeeper instance. I would like to import a configuration but before that I would like to test that my program is able to connect to Zookeeper. So far I have something like that:

public Boolean zookeeperRunning() {
    CuratorFramework curatorFramework = 
            CuratorFrameworkFactory.newClient(zookeeperConn, new RetryOneTime(1));
    curatorFramework.start();

    CuratorZookeeperClient zkClient = curatorFramework.getZookeeperClient();
    return zkClient.isConnected();
}

I've already started ZooKeeper on my local machine and I checked the connection with zkCli and the client is able to connect to it. The zookeeperCon variable is set to "127.0.0.1:2181" (I tried with localhost:2181 as well). The problem is that the above method always returns false despite the fact that zkServer is up n running. Most probably, the syntax is not correct but I could not find a solution online. Could you please help me with why the above code cannot find the zkServer which is up and running?


Solution

  • You can use a builder to create a configured client and setup a listener to monitor your zk instance's state:

    // start client
    client = CuratorFrameworkFactory.builder()
        .connectString("localhost:2181")
        .retryPolicy(new ExponentialBackoffRetry(1000, 3))
        .namespace("heavenize")
        .build();
    
    client.getConnectionStateListenable().addListener(new ConnectionStateListener() {      
      @Override
      public void stateChanged(CuratorFramework client, ConnectionState newState)
      {
        log.info("State changed to: "+newState);
      }
    });
    }