Java 11 HttpClient - HttpClient 与并发 HttpRequest 的最佳比率是多少

2023-11-23

在下面的示例中,我创建一个 Java 11 httpClient,然后创建多个并发 HttpRequest。

  1. 这是不好的做法吗?
  2. 每个 HttpRequest 都应该有自己的 HttpClient 吗?
  3. HttpClient 可以拥有的 HttpRequest 数量是否有上限?

Code

    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");
    }

这在文档中没有明确记录API 文档HttpClient。但 HttpClient 应该被设计为处理多个请求。这在某种意义上隐含着Java HTTP 客户端简介:

构建后,HttpClient 可用于发送多个请求。

现在,您的问题可能是关于管理客户端的并发性。而不是使用相同的实例HttpClient,这与它使用的执行器服务有很大关系,这是您可以自定义的(请参阅here):

ExecutorService executorService = Executors.newFixedThreadPool(10);
HttpClient httpClient  = HttpClient.newBuilder()
                               .executor(executorService)
                               ... //more config
                               .build();

这样,您可以管理客户端用于运行异步请求的线程池。

换句话说:

这是不好的做法吗?

No

每个 HttpRequest 都应该有自己的 HttpClient 吗?

No

HttpClient 可以拥有的 HttpRequest 数量是否有上限?

您必须测试应用程序的最佳并发设置,然后使用相应配置的执行程序服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 11 HttpClient - HttpClient 与并发 HttpRequest 的最佳比率是多少 的相关文章

随机推荐

  • 如何在列表理解中转换这个 for 循环?

    我有一个像这样的 for 循环 for i in conversion for f in glob glob i print os path getsize f 我想将其转换为列表理解 尝试过这个 os path getsize f for
  • 从某个范围生成随机整数

    我需要一个函数 它可以生成给定范围 包括边界值 内的随机整数 我没有不合理的质量 随机性要求 我有四个要求 我需要它快点 我的项目需要生成数百万 有时甚至数千万 的随机数 而我当前的生成器函数已被证明是一个瓶颈 我需要它相当均匀 使用 ra
  • 获取对象的实例名称,而不是 C# 4.0 中的对象类型名称

    假设这个类型 public class Car 我创建了一个实例 Car myCar new Car Target target new Target target Model myCar 这是另一种类型 public class Targ
  • C# python 实时进程间

    我正在开发一个项目 其中一个应用程序使用 C 编写 另一个应用程序使用 Python 编写 C 应用程序将持续分析数据流 并在每次检测到有趣的内容时发出一个标志 因此 每次发生事件时 我的 Python 应用程序都必须读取它并继续其自己的进
  • 包含 espresso-contrib:2.0 时出现 java.lang.InknownClassChangeError

    我有 android support v7 widget RecyclerView 的子类 当我使用该应用程序并进行测试时 它工作得很好 但是 当我在 gradle 应用程序文件中包含 espresso contrib 时 当我尝试运行相同
  • 自定义 Visual Studio MSIX 打包项目输出

    我正在使用 Visual Studio MSIX 打包项目在网络共享上为内部应用程序创建安装程序 一个问题是它正在创建一个末尾带有 Test 的目录 为什么会这样以及我该如何摆脱它 我只想要 MyApp MSIX 0 0 1 0 或者理想情
  • 在 matlab 中保存 imagesc 的精确图像输出

    你好 我想保存这张图片imagesc magic 3 确切的彩虹表示 可能吗 Thanks 这个问题可能看起来像重复的问题 但事实并非如此 我在这个网站上查看了类似问题的解决方案 但它并不令我满意 我查看了 Matlab 帮助中心 得到的最
  • android ffmpeg .so下载[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有人知道从哪里获得 Android 编译的 so FFMPEG 库吗 我尝试了数千次使用 Android NDK 在 windows 7 上手动编译
  • 接受 YouTube 的 cookie 同意

    我正在尝试从 Youtube 频道检索 Youtube 视频列表 例如 https www youtube com user YouTube videos 以获得第 n 个第一个视频 感谢key videoId 它曾经像魅力一样发挥作用 直
  • Oracle中的游标for循环

    请解释一下如何在 oracle 中使用游标 for 循环 如果我使用下一个代码 一切都很好 for rec in select id name from students loop do anything end loop 但是如果我为这个
  • 绘制一个奇特的对角相关矩阵,其系数位于上三角形中

    我有以下内容合成的数据框 包括数值 and 绝对的列以及label柱子 我想绘制一个对角相关矩阵并在上部显示相关系数 如下所示 预期产出 尽管合成数据集 数据帧中的分类列df需要转换成数值 到目前为止我已经用过这个海伯恩的例子 using
  • 如何以角度获取前一个日期?

    请帮我获取 Angular 4 中之前的日期 currentdate Date this currentdate new Date console log this datePipe transform this currentdate y
  • 如何在 OpenNLP 中训练命名实体识别器标识符?

    好的 我有以下代码来训练来自 OpenNLP 的 NER 标识符 FileReader fileReader new FileReader train txt ObjectStream fileStream new PlainTextByL
  • 子集的积和

    这个操作有名字吗 并且 是否存在封闭式表达式 对于给定的 n 个元素集合 k 值介于 1 和 n 之间 获取 k 个项目的所有子集 组合 求每个子集的乘积 求所有这些乘积的总和 我可以用 Python 表达这一点 并且很容易地进行计算 fr
  • 用非IO事件中断epoll_wait,没有信号

    当前场景是 epoll wait 超过几个 fd 和一个可能传入消息的队列 我希望 epoll wait 下面的循环在 IO 事件或新消息上执行 我知道的方法 Use a time毫秒超时并在循环中首先检查队列 Use the 自管技巧当消
  • 当兼容模式打开时,Font Awesome 4.2.0 无法在 IE11 中呈现

    Font Awesome 4 2 0 在 Chrome Firefox Safari Opera 和 Internet Explorer 11 中完美呈现 但仅限于 关闭 兼容模式 当兼容模式打开 打开 时 不会渲染任何字形图标 我尝试过使
  • 嵌套有序列表与数字、字母和罗马数字的组合进行编号?

    我想创建一个如下所示的有序列表 1 Item 1 2 Item 2 a Subitem 1 b Subitem 2 I Sub Subitem 1 II Sub Subitem 2 c Subtiem 3 3 Item 3 即子列表应使用字
  • 修改 Info.plist 以在运行时设置“Application is agent(UIElement)”

    假设我需要让用户能够通过首选项面板选择是否将该应用程序用作 标准 带有停靠图标和菜单 或作为代理应用程序 仅带有状态栏菜单 我想我需要在执行期间以编程方式修改应用程序的 Info plist 将参数 应用程序是代理 更改为是 否 这是正确的
  • 内核模块中的 EXPORT_SYMBOL | insmod 期间未定义的符号

    我有一个来自 a ko 内核模块 的导出函数 foo 和 foo1 foo1 接受输入参数 一个函数指针 我从 b ko 调用 foo1 并将 foo 作为输入参数传递 我看到 b ko 未知符号 foo 的 insmod 失败 即使 a
  • Java 11 HttpClient - HttpClient 与并发 HttpRequest 的最佳比率是多少

    在下面的示例中 我创建一个 Java 11 httpClient 然后创建多个并发 HttpRequest 这是不好的做法吗 每个 HttpRequest 都应该有自己的 HttpClient 吗 HttpClient 可以拥有的 Http