如何以编程方式检查Zookeeper是否正在运行?

问题描述:

我使用CuratorFramework(我还是一个新手)为了连接到一个Zookeeper实例。我想导入一个配置,但在此之前我想测试我的程序能够连接到Zookeeper。到目前为止,我有这样的事情:如何以编程方式检查Zookeeper是否正在运行?

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

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

我已经在我的本地计算机上启动的ZooKeeper和我检查与zkCli连接,客户端能够连接到它。 zookeeperCon变量设置为“127.0.0.1:2181”(我也尝试使用localhost:2181)。问题是,尽管zkServer运行正常,但上述方法总是返回false。最有可能的是,语法不正确,但我无法在网上找到解决方案。你能帮我解释为什么上面的代码找不到正在运行的zkServer吗?

可以使用Builder创建一个配置的客户端和安装监听器来监控您的ZK实例的状态:

// 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); 
    } 
}); 
} 
+0

很抱歉,如果我的问题是愚蠢的,但上面的方法如何返回boolean变量?我希望我的方法具有以下签名:“public Boolean zookeeperRunning(){}” – 2014-10-31 15:20:43

+0

每次调用stateChanged并从getZKState()返回时,都可以设置全局布尔标志。 – bachr 2014-10-31 15:32:18