Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Solr 6.4:Java.net.NoRouteToHostException:无法分配请求的地址_Java_Solr - Fatal编程技术网

Java Solr 6.4:Java.net.NoRouteToHostException:无法分配请求的地址

Java Solr 6.4:Java.net.NoRouteToHostException:无法分配请求的地址,java,solr,Java,Solr,我制作了一个查询Solr的Java控制台应用程序。查询很激烈,因为有些查询是按ID(同一查询中约500个ID)进行的,有些查询是按文本属性进行的。此应用程序是多线程的,当我在单个线程中运行时没有错误,但当我设置多线程时,在运行一段时间后,,我开始出现以下错误: org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: http://xxx.xxx.xx.xxx:

我制作了一个查询Solr的Java控制台应用程序。查询很激烈,因为有些查询是按ID(同一查询中约500个ID)进行的,有些查询是按文本属性进行的。此应用程序是多线程的,当我在单个线程中运行时没有错误,但当我设置多线程时,在运行一段时间后,,我开始出现以下错误:

org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: http://xxx.xxx.xx.xxx:8983/solr/xx
        at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:624)
        at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:279)
        at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:268)
        at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:149)
        at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:942)
        at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:957)
        at org.example.ProcessFile.getByPropertyFromSolr(ProcessFile.java:570)
        at org.example.ProcessFile.processLinesBulk(ProcessFile.java:226)
        at org.example.ProcessFile.importItemsInFile(ProcessFile.java:117)
        at org.example.ProcessFile.call(ProcessFile.java:97)
        at org.example.ProcessFile.call(ProcessFile.java:56)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.NoRouteToHostException: Cannot assign requested address (Address not available)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
        at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:605)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:440)
        at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
        at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:515)
这是我对maven的依赖:

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  <version>6.4.0</version>
</dependency>
知道在单线程中我没有这个问题,我相信这是因为Solr服务器需要很长时间来响应一个请求,而另一个线程正在触发另一个查询


有什么提示可以让我不犯这个错误吗?我可以将SolrClient设置为等待服务器响应而不是抛出错误吗?

您可能已经达到了每个碎片的最大连接数。通过使用HttpSolrClient.Builder(solrUrl)。withConnectionTimeout(10000)。withSocketTimeout(60000)。build()可能与操作系统的基础设置相关,在try中签出maxConnectionsPerHost属性:
private SolrDocument getByPropertyFromSolr(String property, String value){

    String urlString = dotenv.get("GAIMP_SOLR_URL");
    HttpSolrClient solr = new HttpSolrClient.Builder(urlString).build();
    solr.setParser(new XMLResponseParser());

    try {

        SolrQuery query = new SolrQuery();
        query.set("q", property + ":\"" + ClientUtils.escapeQueryChars(value) + "\"");
        query.setStart(0);
        query.setRows(1);
        QueryResponse response = solr.query(query);
        SolrDocumentList results = response.getResults();

        if (results.size() > 0) {
            return results.get(0);
        }

    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        try {
            solr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return null;
}