我有这个要求,我想限制solr的并发调用次数50。所以我试图在HTTP客户端中实现连接池,然后在solr对象HttpSolrServer中使用。请找到以下代码
`
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(
HttpClientUtil.PROP_MAX_CONNECTIONS_PER_HOST, 50);
httpclient.getParams().setParameter(
HttpClientUtil.PROP_MAX_CONNECTIONS, 50);
HttpSolrServer httpSolrServer = new HttpSolrServer(
"solr url",httpclient);
SolrQuery solrQuery = new SolrQuery("*:*");
for (int i = 0; i < 100000000; i++) {
long numFound = httpSolrServer.query(solrQuery).getResults()
.getNumFound();
System.out.println(numFound);
}`
我期待从我的应用程序到solr只创建50个连接,然后可能会遇到一些缓慢,直到释放旧连接。但是,每隔一定的时间间隔就会创建一个新的连接,尽管solr端有等待的连接,并且这些连接永远不会再次使用。
示例输出
tcp 0 0 192.168.0.241:22 192.168.0.109:54120 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.241:8190 ::ffff:192.168.0.109:47382 TIME_WAIT
tcp 0 0 ::ffff:192.168.0.241:8190 ::ffff:192.168.0.109:47383 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.241:8190 ::ffff:192.168.0.109:47371 TIME_WAIT
tcp 0 0 ::ffff:192.168.0.241:8190 ::ffff:192.168.0.109:47381 TIME_WAIT
其中109是运行我的应用程序的ip,241是执行solr的ip。在这种情况下, ffff:192.168.0.109:47382 永远不会再次使用,最后由solr终止
我在某个地方出错了。 任何帮助将受到高度赞赏
答案 0 :(得分:1)
HttpSolrServer应该是单身。每个solr url只创建一个HttpSolrServer实例。