java - Java 11 HttpClient - HttpClients 与并发 HttpRequests 的最佳比率是多少
问题描述
在下面的示例中,我创建了一个 Java 11 httpClient,然后创建了多个并发 HttpRequest。
- 这是不好的做法吗?
- 每个 HttpRequest 都应该有自己的 HttpClient 吗?
- HttpClient 可以拥有的 HttpRequest 数量是否有上限?
代码
private static void httpClientExample(){
HttpClient httpClient = HttpClient.newHttpClient();
System.out.println("TP1");
var task1 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://www.bing.com/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
var task2 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://openjdk.java.net/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
var task3 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://www.google.co.uk/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
System.out.println("Requests Sent");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main Thread Completed");
}
解决方案
这没有明确记录在HttpClient
. 但预计 HttpClient 旨在处理多个请求。这在某种意义上暗示了 Java HTTP 客户端简介:
构建后,可以使用 HttpClient 发送多个请求。
现在,您的问题可能是关于管理客户端的并发性。这与使用的 executor 服务有很大关系,而不是使用相同的实例HttpClient
,这是您可以自定义的(参见此处):
ExecutorService executorService = Executors.newFixedThreadPool(10);
HttpClient httpClient = HttpClient.newBuilder()
.executor(executorService)
... //more config
.build();
这样,您可以管理客户端用于运行异步请求的线程池。
换句话说:
这是不好的做法吗?
不
每个 HttpRequest 都应该有自己的 HttpClient 吗?
不
HttpClient 可以拥有的 HttpRequest 数量是否有上限?
您必须测试应用程序的最佳并发设置,然后使用相应配置的执行器服务。
推荐阅读
- pyspark - 如何在 RDD 中拆分元组
- openssl - 如何在 openssl 中使用 ECC 公钥共享 AES-256 密钥
- c# - C# string.Replace 删除 �?
- ios - 获取子视图高度以估计另一个视图高度
- c++ - 使用 glViewport 的分段错误(使用 GLFW 和 GLAD 进行 openGL C++ 编程)
- azure-data-factory - Azure 数据工厂将参数传递给数据流
- reactjs - 开玩笑的测试库 - 模拟拒绝承诺不能按预期在 useAsync() 中工作
- kubernetes - GKE 知道何时从 UI 创建 Kubernetes Pod
- javascript - if else 语句 javascript 返回 false 语句
- javascript - 为什么此 yargs 脚本帮助页面中缺少命令?