当前位置: 首页 > 知识库问答 >
问题:

如何通过编程检查Zookeeper是否正在运行?

权浩邈
2023-03-14

我正在使用CuratorFramework(我还是个新手)来连接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吗?

共有3个答案

哈和惬
2023-03-14

你应该连接zookeeper服务器,然后检查它。例如:

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.test.TestingServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertTrue;

public class ZkClientTest {
    TestingServer zkServer;

    @Before
    public void startZookeeper() throws Exception {
        zkServer = new TestingServer(2181);
        zkServer.start();
    }

    @After
    public void stopZookeeper() throws IOException {
        zkServer.stop();
    }

    @Test
    public void should_connect_to_zookeeper_server_when_config_use_default_localhost_2181()
        throws InterruptedException {
        CuratorFramework client = ZkClient.getInstance().getClient();
        try {
            client.blockUntilConnected(3, TimeUnit.SECONDS);
            assertTrue(ZkClient.getInstance().getClient().getZookeeperClient().isConnected());
        } finally {
            ZkClient.getInstance().close();
        }
    }
}
韩博厚
2023-03-14

在获得zkClient后,应首先连接zookeeper,如果成功,则检查isConnected状态。演示代码如下(请参阅此处):

private static CuratorFramework buildConnection(String url) {
    CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(url, new ExponentialBackoffRetry(100, 6));

    // start connection
    curatorFramework.start();
    // wait 3 second to establish connect
    try {
        curatorFramework.blockUntilConnected(3, TimeUnit.SECONDS);
        if (curatorFramework.getZookeeperClient().isConnected()) {
            return curatorFramework.usingNamespace("");
        }
    } catch (InterruptedException ignored) {
        Thread.currentThread().interrupt();
    }

    // fail situation
    curatorFramework.close();
    throw new RuntimeException("failed to connect to zookeeper service : " + url);
}
邹时铭
2023-03-14

您可以使用生成器创建已配置的客户端,并设置侦听器来监视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);
  }
});
}
 类似资料:
  • 问题内容: 如何检查存储过程或查询是否仍在SQL Server中运行? 主意 我曾经想过要在过程开始时在哪里写日志,并在过程结束时将日志删除。 缺陷: 使用过程监控器 我希望能有一个可以合并为一个存储过程的解决方案和/或,作为输入,所以使用SQL Server的界面将无法正常工作跟踪程序或解决方案。 更新#1 用法示例: 该过程应该像 并在运行时(20秒内)返回true,然后在函数失败或系统重新启

  • 问题内容: 我正在尝试创建一个bash实用程序脚本以检查我的服务器中是否正在运行docker守护进程。除了运行这样的代码之外,还有没有更好的方法来检查docker守护进程是否正在我的服务器中运行? 我想创建一个bash shell脚本,该脚本将检查我的docker守护程序是否正在运行。如果它正在运行,则什么也不做,如果没有,则启动docker守护程序。 我的伪代码是这样的。我正在考虑解析ps -e

  • 我正在尝试创建一个bash实用程序脚本来检查docker守护程序是否在我的服务器中运行。除了运行这样的代码之外,有没有更好的方法来检查docker守护程序是否在我的服务器中运行? 我想创建一个bash shell脚本来检查我的docker守护进程是否正在运行。如果它正在运行,那么什么也不做,但是如果它没有运行,那么就启动docker守护进程。 我的伪代码大概是这样的。我正在考虑解析我的ps -ef

  • 问题内容: 如何检查Glassfish DAS是否以编程方式运行,即使已将其部署在本地计算机还是远程计算机上? 使用Java6 问题答案: 我找到了一种方法来检查DAS是否已启动,而不是Linux脚本。通过这种方式,我的应用程序和DAS都在同一台计算机上还是每台安装在不同的计算机上都没有关系。 }

  • 问题内容: 如何检查PHP中是否存在URL(非404)? 问题答案: 这里: 在这里和上面帖子的下面,有一个curl解决方案:

  • 问题内容: 有什么方法可以检查给定线程是否正在休眠? 问题答案: 您可以呼叫并检查状态是否为。 请注意,但这并不一定意味着调用的线程也可能正在调用中或其他类似的事件中等待。