繁体   English   中英

并行化 REST 调用的最佳方法是什么?

[英]What's the best way to parallelize a REST call?

我正在处理一些处理多个 REST 调用的 Java 代码

call1()
call2()
call3()
...

我想并行化这些调用,但同步执行我的主要代码。 我用lamba和并行流制作了一个POC:

List<Runnable> list = new ArrayList();
list.add(() -> {call1()});
list.add(() -> {call2()});
list.add(() -> {call3()});
list.add(...);

list.parallelStream()
            .forEach(Runnable::run);

你有其他解决方案吗? 我还检查了使用来自 Jersey 客户端的异步调用,但这需要更多的代码更改。

您正在寻找的只是异步运行您的调用。 您可以使用CompletableFuture提交任务,然后等待它们完成:

list.stream() //you don't really need a parallel stream
    .map(CompletableFuture::runAsync)
    .collect(Collectors.toList()) //make sure all tasks are submitted
    .stream()
    .forEach(CompletableFuture::join);

这将提交所有任务(异步运行),然后等待每个任务完成运行。 发生这种情况时,该方法将返回。

您可能需要控制异步任务的线程池。 这是一个使用 10 线程池的示例:

ExecutorService es = Executors.newFixedThreadPool(10);
list.stream()
    .map(r -> CompletableFuture.runAsync(r, es))
     ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM