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