【发布时间】:2014-12-24 15:40:08
【问题描述】:
我有这个要求,我想限制对 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 终止
我是不是在某个地方出错了。 任何帮助将不胜感激
【问题讨论】:
-
您使用的是哪个版本的 SolrJ?
标签: solr httpclient solrj