java - Spring Web 应用程序和使用线程池的异步执行
问题描述
我有一个 spring 应用程序,它充当协调器,其职责是聚合来自 6 个以上其他 spring web 应用程序的结果,这些应用程序的结果彼此互斥,这意味着每个服务查询可以并行完成。为此,我们将 CompletableFuture 与 ForkJoinPool 公共池一起使用,并具有默认池大小,并且由于我们在每个线程中的唯一工作是 IO 查询其他服务,因此当系统负载很大时,我们会看到线程池耗尽。
final List<CompletableFuture<List<Data>>> completableFutures = CompletableFuture.supplyAsync(() -> serviceToQuery.execute(...)).collect(Collectors.toList());
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[completableFutures.size()])).join();
我们可以看到每秒约 3000 个请求,使用断路器将每个服务请求超时设置为 3 秒。我们已经看到这个设置也发生了超时。
如果有人能阐明如何针对大量查询进行调整或建议任何其他方法,我将不胜感激,我还研究了基于线程池执行器的 @Async。非常感谢这里的任何指针。
解决方案
推荐阅读
- vue.js - 如何将自定义域代理到 vuejs 应用程序?
- javascript - 高清录制 - Ziggeo Recorder v2 JS
- javascript - React-Redux 问题。找不到变量 mapDispatchToProps
- javascript - 如何将其他项目添加到存储数组并且在重置时仍然能够将数组设置为空?
- sql - 检查 2 个表是否有相同的 ID,如果表 1 中的 ID 存在于表 2 中,则在列中返回 1/0
- python - 文本到列熊猫
- bash - Bash 脚本未正确检查 null
- php - preg_match 与多行无法正常工作
- python - 无法将 cuda 编译代码与 pytorch 一起使用
- angular - 无法使用注入的 angularjs 服务测试角管