java - Spring Boot异步线程未完成任务
问题描述
我一直在研究一个爬虫,我必须在某个特定的服务器上发出 1000 多个请求。到目前为止,它运行良好。但是现在异步任务没有完成。这是我的示例代码。
private static CloseableHttpClient httpclient = HttpClients.createDefault();
private String getContent(TaskUrl taskUrl, String hostname, int port,
Map<String, String> basicHeaders) {
String uri = taskUrl.getUrl();
HttpHost proxyHost = new HttpHost(hostname, port);
RequestConfig.Builder reqconfigconbuilder = RequestConfig.custom();
// in case proxy are slow to fetch data timout can be increased to 7 sec. Any longer than that might make a negative impact
reqconfigconbuilder.setConnectionRequestTimeout(5000);
reqconfigconbuilder.setConnectTimeout(5000);
reqconfigconbuilder.setSocketTimeout(5000);
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
HttpGet httpget = new HttpGet(uri);
if (basicHeaders != null) {
for (Map.Entry<String, String> entry : basicHeaders.entrySet()) {
httpget.addHeader(entry.getKey(), entry.getValue());
}
}
List<String> userAgentList = CommonConstant.getCustomUserAgent();
int in = StringUtils.getRandomIntegerBetweenRange(0, userAgentList.size() - 1);
httpget.addHeader("User-Agent", userAgentList.get(in));
httpget.setConfig(config);
logger.debug("Now executing ");
try (CloseableHttpResponse response = httpclient.execute(httpget)) {
logger.info("Status code for url : {} {} with port : {} with host : {}", uri,
response.getStatusLine().getStatusCode(), port, hostname);
if (response.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(response.getEntity());
} else if (response.getStatusLine().getStatusCode() == 404) {
return "404";
}
return null;
} catch (IOException e) {
logger.error("Error for url : {} {}", uri, e.getMessage());
return null;
}
对于前 150 到 200 个 url,它工作正常。但过了一段时间,我可以看到日志卡在Now Executing之后什么都没有发生。有一段时间,该过程在 1 小时后才恢复。任何人都可以在这方面帮助我。我不知道为什么它会这样。它不应该在完成任务之前停止。任何帮助,将不胜感激。
解决方案
推荐阅读
- snowflake-cloud-data-platform - 是否可以在 RStudio Server 中将 snowflakedb JDBC 与authenticator=externalbrowser 一起使用?
- oracle - 在 Sql 中使用 ,00 进行列 valorize
- python - 如何将字符串数据条目重新编码为数字或十进制值?
- r - 在 Sumatra PDF 阅读器中打开已编译的 .rnw 的自定义功能?
- apache-kafka - 如何从 Apache NiFi 流中自动保存 Avro 模式到 Confluent Schema Registry 中?
- apache-camel - Apache Camel: What meaning of "attachments" in message model?
- sql - 如何找到今天的金额与上次在 SQL 中发布交易的金额之间的差异?
- c++ - clang-tidy:什么可能导致 NOLINT 评论不被尊重?
- javascript - 从 VueJS + Vuex 中的父组件访问动态组件内的数据
- r - R parLapply:如何(或我们可以)访问并行代码中的对象