在可变数量的对象上使用CompletableFuture.allOf

问题描述 投票:0回答:1

请多多包涵,我通常不使用spring,也没有使用Java的较新版本(我说较新的意思是探针1.4以后的东西)

无论如何,我有一个问题,我必须做多个调用才能使用多个并行请求进行搜索。我一直在网上四处逛逛,看到您可以使用CompletableFuture。

因此,我创建了我的方法来从其余调用中获取所需的对象:

@Async
public CompletableFuture<QueryObject[]> queryObjects(String url)
{
    QueryObject[] objects= restTemplate.getForObject(url, QueryObject[].class);
    return CompletableFuture.completedFuture(objects);
}

现在我需要这样称呼:

CompletableFuture<QueryObject> page1 = QueryController.queryObjects("http://myrest.com/ids=[abc, def, ghi]);
CompletableFuture<QueryObject> page2 = QueryController.queryObjects("http://myrest.com/ids=[jkl, mno, pqr]);

我的问题是,该调用一次只需要执行三个ID,并且可能会有一个可变编号ID的列表。因此,我解析idlist并创建一个类似于上面的查询字符串。我遇到的问题是,尽管我可以调用查询,但是我没有单独的对象,因此可以在上面调用CompletableFuture.allOf。

有人能告诉我这样做的方法吗?我已经花了一段时间了,我没有比我现在所处的位置更远的地方。如果以上内容不足,我们很乐意提供更多信息

java spring completable-future
1个回答
0
投票

[以现在使用的方式使用CompletableFuture并没有任何好处。

您正在使用的restTemplate方法是同步方法,因此它必须先完成并返回结果,然后再继续。因此,将最终结果包装在CompletableFuture中不会导致它异步执行(两个都不并行执行)。您只需包装已检索到的响应即可。

如果要从异步执行中受益,则可以使用AsyncRestTemplateWebClient

© www.soinside.com 2019 - 2024. All rights reserved.