【问题标题】:Make parallel API calls using Spring boot/java使用 Spring boot/java 进行并行 API 调用
【发布时间】:2021-05-07 13:29:00
【问题描述】:

我是 Spring Boot 的新手,并且正在学习一些东西。我有一个关于进行并行 API 调用的快速问题。

我有一个 id 数组,我将附加到第 3 方 API 端点并发出 GET 请求并聚合数据并在所有 3000 次调用完成后从中生成一个文件。

这里的问题是数组的大小为 3000,即我预计会进行 3000 次调用。我觉得使用for循环并迭代超过3000次没有任何意义,而且效率较低。

任何人都可以向我建议最好和最有效的方法吗?

谢谢

【问题讨论】:

  • 你确定第三方api支持短时间内3000次调用吗?
  • 是的,我的意思是 3000 不会立即出现可能我们可以使用批处理机制,例如一次 500 个调用,然后暂停并继续下一个 500
  • 你需要聚合哪些数据?
  • 很少的字段,如 cmets 字段、用户名、id 等。每个 api 调用最多 5 个字段。每个 API 响应都有很多字段,但我只对其中 5 个感兴趣。

标签: java spring-boot parallel-processing


【解决方案1】:

你可以这样做:

List<Integer> ids = IntStream.range(1, 13).boxed().collect(Collectors.toList());
int partitionSize = 5;

for (int i = 0; i < ids.size(); i += partitionSize) {
    List<Integer> currPartition = ids.subList(i, Math.min(i + partitionSize, ids.size()));

    String partitionStr = currPartition.parallelStream() 
            .map(id -> callAPI(id)) // change the aggeragtion according to your needs
            .collect(Collectors.joining(", ")); 

    System.out.println(partitionStr);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多