2013-07-29 3 views
3

ASP.net MVC 4에서 Solr의 프론트 엔드를 쓰고 있는데, 사육사와 연결하고 활성 노드를 읽고 무작위로 연결하려고합니다. 내가 그것을 반환 -4 (CONNECTIONLOSS)를 실행할 때사육사에서 라이브 노드 읽기 Solom

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]; 
    } 
} 

,하지만 디버깅을 시작할 때, 그것은 올바른 결과를 반환, 어떤 생각, 왜 ??? :이 목적을 위해이 코드를 썼다

+0

이 셔플을 좋아! – SimplyInk

답변

2

좋아, 문제를 해결했습니다. 사육사는의 ctor에서 비동기 연결이, 그래서 당신은이 같이 떨어지게와 연결 될 때까지 기다릴 필요가 :

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

SOLRJ API에서 사용하는 방법을 알 수 있습니까? @Windys –