阅读Zookeeper Solr中的Live节点

本文关键字:Live 节点 中的 Solr Zookeeper 阅读 | 更新日期: 2023-09-27 18:25:32

我正在ASP.net MVC 4中编写Solr的前端,我想连接到Zookeeper并读取活动节点,然后连接到随机节点。为此,我编写了以下代码:

public class zkResolver
{
    private static readonly TimeSpan timeout = TimeSpan.FromSeconds(400);
    private const String LIVE_NODES_ZKNODE = "/live_nodes";
    public String ErrorMsg { get; set; }
    public static String getActiveInstance(String instanceUrl)
    {
        ZooKeeper zk = new ZooKeeper(instanceUrl, timeout, null);
        List<String> activeNodes = zk.GetChildren(LIVE_NODES_ZKNODE, false);
        Random rnd = new Random();
        int i = rnd.Next(0, activeNodes.Count - 1); //lets shuffle baby
        return activeNodes[i];
    }
}

然而,当我运行它时,它返回-4(CONNECTIONLOSS),但当我开始调试时,它会返回正确的结果,知道吗,为什么吗???

阅读Zookeeper Solr中的Live节点

好的,我已经解决了这个问题。ZooKeeper在ctor中有异步连接,所以你必须等待它与smth连接,如下所示:

        while (zk.State == ZooKeeperNet.ZooKeeper.States.CONNECTING)
        {
            Thread.Sleep(TimeSpan.FromSeconds(1));
        }