使用solr实现连接池时遇到问题

时间:2014-07-25 09:34:50

标签: solr httpclient solrj

我有这个要求,我想限制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终止

我在某个地方出错了。 任何帮助将受到高度赞赏

1 个答案:

答案 0 :(得分:1)

HttpSolrServer应该是单身。每个solr url只创建一个HttpSolrServer实例。