请多多包涵,我通常不使用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。
有人能告诉我这样做的方法吗?我已经花了一段时间了,我没有比我现在所处的位置更远的地方。如果以上内容不足,我们很乐意提供更多信息
[以现在使用的方式使用CompletableFuture
并没有任何好处。
您正在使用的restTemplate
方法是同步方法,因此它必须先完成并返回结果,然后再继续。因此,将最终结果包装在CompletableFuture
中不会导致它异步执行(两个都不并行执行)。您只需包装已检索到的响应即可。
如果要从异步执行中受益,则可以使用AsyncRestTemplate或WebClient。