Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 建议:从我的服务打平行电话到另一个微服务_Java_Spring_Spring Boot_Executorservice_Executor - Fatal编程技术网

Java 建议:从我的服务打平行电话到另一个微服务

Java 建议:从我的服务打平行电话到另一个微服务,java,spring,spring-boot,executorservice,executor,Java,Spring,Spring Boot,Executorservice,Executor,我有如下要求 根据特定条件进行DB调用并获取结果列表 对于列表中存在的每个记录,对微服务进行GETAPI调用 整合微服务的所有结果并给出响应 我想让第二步平行。现在,根据数据,我知道列表中出现的记录不会超过15条。所以我想用executorservice来做这个 Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()) 现在我对是否 使用ExecutorService是我的方案的最佳方法。或者我应该用别的东

我有如下要求

根据特定条件进行DB调用并获取结果列表 对于列表中存在的每个记录,对微服务进行GETAPI调用 整合微服务的所有结果并给出响应 我想让第二步平行。现在,根据数据,我知道列表中出现的记录不会超过15条。所以我想用executorservice来做这个

Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
现在我对是否

使用ExecutorService是我的方案的最佳方法。或者我应该用别的东西 我应该像Executors.newFixedThreadPoolRuntime.getRuntime.availableProcessors那样创建一个新的执行器,还是让容器使用@Autowired注入一个托管执行器 因为您有一个记录列表,所以可以使用parallelStream对其进行迭代

parallelStream将并行执行API调用。并行调用的数量受CPU线程数的限制

您可以使用JVM属性增加它:


-Djava.util.concurrent.ForkJoinPool.common.parallelism=20

当你说“创建一个新的执行器,如…”时,你是指内联的还是在某些类构造函数中,等等。?ExecutorService当然是一种合理的并行方式。如果可能的话,一个可能更好的选择是修改micro服务,使其能够处理像此多部分或类似的批处理查询,并让其处理线程要求,而不是两个服务都有多达15个线程来处理此问题,只有一个需要它。@user2478398我正在创建内联。在方法中,我将对另一个微服务进行服务调用
List<SomeObject> objectList = resultFromDB();
objectList.parallelStream()
          .map(obj -> makeApiCallInParallel(obj))
          .collect(Collectors.toList());