我有一个需求如下
- 根据特定条件进行数据库调用并获取结果列表
- 对于列表中的每条记录,对微服务进行 GET API 调用
- 整合微服务的所有结果并给出响应
我想让第二步并行。现在我根据数据知道列表中不会超过 15 条记录。所以我想到使用 executorservice 来实现这一点。
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
现在我不太有信心是否可以
- 正在使用
ExecutorService
最适合我的场景的方法。或者我应该使用其他东西 - 我应该创建一个新的执行器,例如
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
或者让容器使用@Autowired
注入(inject)托管 Executor
最佳答案
由于您有一个记录List
,因此您可以使用parallelStream
对其进行迭代。
List<SomeObject> objectList = resultFromDB();
objectList.parallelStream()
.map(obj -> makeApiCallInParallel(obj))
.collect(Collectors.toList());
parallelStream
将并行执行 API 调用。并行调用的数量受到 CPU 线程数量的限制。
您可以使用 JVM 属性来增加它:
-Djava.util.concurrent.ForkJoinPool.common.parallelism=20
关于java - 建议 : Making parallel call from my service to another micro service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60112921/