java - 建议 : Making parallel call from my service to another micro service

标签 java spring spring-boot executorservice executor

我有一个需求如下

  • 根据特定条件进行数据库调用并获取结果列表
  • 对于列表中的每条记录,对微服务进行 GET API 调用
  • 整合微服务的所有结果并给出响应

我想让第二步并行。现在我根据数据知道列表中不会超过 15 条记录。所以我想到使用 executorservice 来实现这一点。

Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())

现在我不太有信心是否可以

  1. 正在使用ExecutorService最适合我的场景的方法。或者我应该使用其他东西
  2. 我应该创建一个新的执行器,例如 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/

相关文章:

java - 如何处理与微服务无关的类对象?

java - 使用 Java 注解的 ViewResolver

java - 外键列被插入为空

java - @值: Exception at Spring Injection of autowired dependencies with application -'profile' .属性

java - 如何使用join在spring data jpa和spring boot中添加计数字段

spring-boot - 如何使用Java中的Rest API在 Elasticsearch 中索引对象数组

java - 如何从 Date(10-Oct-2014 00 :00:00) to String in Java

java - 包私有(private)方法似乎没有被覆盖

java - 尝试初始化 Spring 时出现 AbstractMethodError

java |验证包装器内的 JSON 对象