Floyd: The Apache Zookeeper project should have the relevant info on how to get the state from ZK directly.
FWIW, Erick On Wed, Jul 10, 2013 at 6:41 AM, Furkan KAMACI <furkankam...@gmail.com> wrote: > By the this is not related to your question but this may help you for > connecting Solr via C#: http://solrsharp.codeplex.com/ > > 2013/7/10 Floyd Wu <floyd...@gmail.com> > >> Hi Furkan >> I'm using C#, SolrJ won't help on this, but its impl is a good reference >> for me. Thanks for your help. >> >> by the way, how to fetch/get cluster state from zk directly in plain http >> or tcp socket? >> In my SolrCloud cluster, I'm using standalone zk to coordinate. >> >> Floyd >> >> >> >> >> 2013/7/10 Furkan KAMACI <furkankam...@gmail.com> >> >> > You can define a CloudSolrServer as like that: >> > >> > *private static CloudSolrServer solrServer;* >> > >> > and then define the addres of your zookeeper host: >> > >> > *private static String zkHost = "localhost:9983";* >> > >> > initialize your variable: >> > >> > *solrServer = new CloudSolrServer(zkHost);* >> > >> > You can get leader list as like: >> > >> > *ClusterState clusterState = >> > cloudSolrServer.getZkStateReader().getClusterState(); >> > List<Replica> leaderList = new ArrayList<>(); >> > for (Slice slice : clusterState.getSlices(collectionName)) { >> > leaderList.add(slice.getLeader()); / >> > }* >> > >> > >> > For querying you can try that: >> > * >> > * >> > *SolrQuery solrQuery = new SolrQuery();* >> > *//fill your **solrQuery variable here** >> > * >> > *QueryRequest queryRequest = new QueryRequest(solrQuery, >> > SolrRequest.METHOD.POST); >> > queryRequest.process(**solrServer**);* >> > >> > CloudSolrServer uses LBHttpSolrServer by default. It's definiton is like >> > that: *LBHttpSolrServer or "Load Balanced HttpSolrServer" is just a >> wrapper >> > to CommonsHttpSolrServer. This is useful when you have multiple >> SolrServers >> > and query requests need to be Load Balanced among them. It offers >> automatic >> > failover when a server goes down and it detects when the server comes >> back >> > up.* >> > * >> > * >> > * >> > * >> > >> > 2013/7/10 Anshum Gupta <ans...@anshumgupta.net> >> > >> > > You don't really need to direct any query specifically to a leader. It >> > will >> > > automatically be routed to the right leader. >> > > You may put a load balancer on top to just fix the problem with >> querying >> > a >> > > node that has gone away. >> > > >> > > Also, ZK aware SolrJ Java client that load-balances across all nodes in >> > > cluster. >> > > >> > > >> > > On Wed, Jul 10, 2013 at 2:52 PM, Floyd Wu <floyd...@gmail.com> wrote: >> > > >> > > > Hi there, >> > > > >> > > > I've built a SolrCloud cluster from example, but I have some >> question. >> > > > When I send query to one leader (say >> > > > http://xxx.xxx.xxx.xxx:8983/solr/collection1) and no problem >> > everything >> > > > will be fine. >> > > > >> > > > When I shutdown that leader, the other replica( >> > > > http://xxx.xxx.xxx.xxx:9983/solr/collection1) in the some shard will >> > be >> > > > new >> > > > leader. The problem is: >> > > > >> > > > The application doesn't know new leader's location and still send >> > request >> > > > to http://xxx.xxx.xxx.xxx:8983/solr/collection1 and of course no >> > > response. >> > > > >> > > > How can I know new leader in my application? >> > > > Are there any mechanism that application can send request to one >> fixed >> > > > endpoint no matter who is leader? >> > > > >> > > > For example, application just send to >> > > > http://xxx.xxx.xxx.xxx:8983/solr/collection1 >> > > > even the real leader run on >> > http://xxx.xxx.xxx.xxx:9983/solr/collection1 >> > > > >> > > > Please help on this or give me some key infomation to google it. >> > > > >> > > > Many thanks. >> > > > >> > > > Floyd >> > > > >> > > >> > > >> > > >> > > -- >> > > >> > > Anshum Gupta >> > > http://www.anshumgupta.net >> > > >> > >>