Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 HttpClient 4.x运行时出现一些随机错误_Java_Apache_Apache Httpclient 4.x - Fatal编程技术网

Java HttpClient 4.x运行时出现一些随机错误

Java HttpClient 4.x运行时出现一些随机错误,java,apache,apache-httpclient-4.x,Java,Apache,Apache Httpclient 4.x,我正在尽可能快地访问上千个URL。使用Apache HTTPClient v4.x,我可以做到这一点,但通常会有大约3-5%的请求以任一主机查找失败告终(这在执行大量请求时很常见,有些请求不可避免地会失败。例如,您可以允许作业自己重新提交(次数有限…)给执行者重试。要么某个迭代成功完成了未来,要么最后一次尝试例外地完成。@radai:这意味着我取出了disableAutomaticRetries(),即使有些请求失败,你建议我使用单独的HttpClient重试还是使用同一个HttpClient重

我正在尽可能快地访问上千个URL。使用Apache HTTPClient v4.x,我可以做到这一点,但通常会有大约3-5%的请求以任一主机查找失败告终(这在执行大量请求时很常见,有些请求不可避免地会失败。例如,您可以允许作业自己重新提交(次数有限…)给执行者重试。要么某个迭代成功完成了未来,要么最后一次尝试例外地完成。@radai:这意味着我取出了disableAutomaticRetries(),即使有些请求失败,你建议我使用单独的HttpClient重试还是使用同一个HttpClient重试?还有一件事:关于“java.net.UnknownHostException”,你认为我得到这些信息是因为请求量大还是因为DNS查找速度慢?这在处理大量请求时很常见-一些请求不可避免地会失败。例如,你可以允许作业自己重新提交(有限的次数…)给执行者重试。要么某个迭代成功完成了未来,要么最后一次尝试例外地完成。@radai:这意味着我删除了disableAutomaticRetries(),即使某些请求失败,您建议我使用单独的HttpClient重试还是使用相同的HttpClient重试?还有一件事:关于“你认为我得到这些是因为请求量大还是因为DNS查找速度慢?
public static ExecutorService pool = Executors.newFixedThreadPool(400);   
AppConfig.monitors.forEach((key, monitor) -> {
        results.add(AppConfig.pool.submit(new WebRequest(monitor)));
    }
});
cm = new PoolingHttpClientConnectionManager();
cm.setDefaultMaxPerRoute(2);
cm.setMaxTotal(1000);

RequestConfig rc = RequestConfig.custom()
    .setSocketTimeout(4000)
    .setConnectTimeout(4000)
    .setCookieSpec(CookieSpecs.IGNORE_COOKIES)
    .setMaxRedirects(1)
    .setRedirectsEnabled(true)
    .setCircularRedirectsAllowed(false)
    .build();
sslContext = SSLContextBuilder
                .create()
                .loadTrustMaterial(TrustSelfSignedStrategy.INSTANCE)
                .build();
sslcsf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
client = HttpClients.custom()
            .setConnectionManager(cm)
            .setDefaultHeaders(headers)
            .setDefaultRequestConfig(rc)
            .setSSLSocketFactory(sslcsf)
            .disableAutomaticRetries()
            .setRedirectStrategy(DefaultRedirectStrategy.INSTANCE)
public class WebRequest implements Callable<Monitor> {
    @Override
    public Monitor call() throws Exception {
        HttpRequestBase request;
        HttpContext context = HttpClientContext.create();
        request = new HttpGet(monitor.getUrl());
        try (CloseableHttpResponse response = WebClient.client.execute(request, context);) {
            request.releaseConnection();
        }
    }
}