在 Java 中并行调用多个 api 的最佳方法是什么?我想做多个rest调用,组合结果并返回一个jsonArray。我正在使用 ExecutorService 并在我仅从一台客户端 PC 访问 url 时获得正确的输出。但是当我从多个客户端访问 url 时,即使我调用相同的 url,每次我也会得到一个不同大小的 jsonArray。
我所做的如下:
ExecutorService executor = Executors.newFixedThreadPool(5);
resultArray = new JSONArray();
for (Branch branch : Branches) {
Future<Response> response = executor.submit(new Request(branch.getUrl(),
branch.getUserName(), branch.getPassword()));
responseBody = response.get().getResponseBody();
resultArray.put(responseBody);
}
executor.shutdown();
while(!executor.isTerminated()) {
}
return resultArray.toString();
public class Request implements Callable<Response> {
private HttpURLConnection con;
private URL obj;
private String response;
private String url;
private String username;
private String password;
public Request(String url, String username, String password) { …Run Code Online (Sandbox Code Playgroud) 我正在用 Java 实现一个网络爬虫。在玩了一些我要爬网的网站之后,我想使用 Java 中并发 HTTP 连接的最佳实践。我目前正在使用Jsoup 的连接方法。我想知道是否可以像HttpAsyncClient一样创建线程并在这些线程内建立连接。
java multithreading web-scraping jsoup apache-httpasyncclient
我有兴趣从一台机器执行大约50个HTTP请求/秒.我不太关心延迟,但我确实关心吞吐量.
我正在尝试决定是使用Apache HttpAsyncClient还是使用Netty.有人能否解释一下每个人对我的问题的好处?
我已经找到了这个比较,但我希望能更详细地解释哪一个更好,哪个用例更好.此外,比较是否意味着使用具有200个线程的同步apache HTTP客户端比其他选项更好?不是200个线程有点太多(假设我使用的是具有4个内核的普通计算机,每个内核2个线程和12GB内存)?
提前致谢
java multithreading performance-testing netty apache-httpasyncclient
我正在使用 Apache HTTP 异步客户端,我必须对其进行一些配置。
我有以下代码,但在设置时我很困惑RequestConfig,IOReactorConfig因为您可以为它们指定超时配置。
我的问题是:这两个配置之间的超时有什么区别?它是双重工作,我可以只设置其中一个配置吗?或者,这两个配置的超时控制不同的东西?
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(socketTimeout)
.setConnectTimeout(connectionTimeout)
.setConnectionRequestTimeout(connectionRequestTimeout)
.build();
// Create I/O reactor configuration
IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
.setIoThreadCount(Runtime.getRuntime().availableProcessors())
.setConnectTimeout(connectionTimeout)
.setSoTimeout(socketTimeout)
.build();
// Create a custom I/O reactort
ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor);
cm.setMaxTotal(maxConnTotal);
cm.setDefaultMaxPerRoute(maxConnPerRoute);
HttpAsyncClientBuilder defaultBuilder = HttpAsyncClients.custom()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(cm)
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setRedirectStrategy(new LaxRedirectStrategy());
Run Code Online (Sandbox Code Playgroud) java timeout http apache-httpclient-4.x apache-httpasyncclient