Java 在Spring Boot中接收到两个响应后,如何并行调用2个外部API并执行合并

Java 在Spring Boot中接收到两个响应后,如何并行调用2个外部API并执行合并,java,spring,multithreading,rest,spring-boot,Java,Spring,Multithreading,Rest,Spring Boot,我有一个小要求,我将有一个唯一的ID 使用这个ID,我需要对2个不同的系统(比如system 1和system 2)执行Rest GET调用,这将从不同的系统返回2个JSON负载 之后,一旦接收到JSON有效负载,如果系统1的有效负载有任何变化,我需要合并 我只是想知道是否有任何Spring Boot功能可以用来完成这项任务,我的主要要求是 1:对系统1和系统2的GET请求应该是并行的 2:仅当我收到来自两个系统的响应时,才执行有效负载的合并和比较 请建议,如果你有一些好的参考或模板,我可以使用

我有一个小要求,我将有一个唯一的ID

使用这个ID,我需要对2个不同的系统(比如system 1和system 2)执行Rest GET调用,这将从不同的系统返回2个JSON负载

之后,一旦接收到JSON有效负载,如果系统1的有效负载有任何变化,我需要合并

我只是想知道是否有任何Spring Boot功能可以用来完成这项任务,我的主要要求是

1:对系统1和系统2的GET请求应该是并行的

2:仅当我收到来自两个系统的响应时,才执行有效负载的合并和比较

请建议,如果你有一些好的参考或模板,我可以使用


提前感谢。

两个api调用都需要使用可完成的功能接口。此接口内的代码将异步运行。下面是它的示例代码

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
    try {
        //api call1
    } catch (InterruptedException e) {
        throw new IllegalStateException(e);
    }
    return "Result of the asynchronous computation";
}

方法的
@Async
,以及配置类中的
@EnableAsync
。了解CompletableFuture Interface您可以建议@Async的实际用途吗?这里我希望两个调用都是同步的,这意味着当两个调用的响应都收到时,我将继续进行合并。此示例不包括他的第二点:
2:仅在收到后执行合并和比较有效负载来自两个系统的响应。
Hello@PawełGłowacz我是否需要执行CompletableFuture.allOf(future1,future2.join();要使它们相互依赖?@HargunSuri
CompletableFuture.allOf().join()
返回一个CompletableFuture,该future在所有给定的期货完成时完成。所以,如果你想比较每一个有效载荷,你需要等到所有的未来都完成。
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
    try {
        //api call2
    } catch (InterruptedException e) {
        throw new IllegalStateException(e);
    }
    return "Result of the asynchronous computation";
}
String result1 = future1.get();
String result2 = future2.get();