java使用AsyncRestTemplate多次生成API,并等待所有操作完成
我必须使用RestTemplate多次使用不同的参数进行RESTAPI调用。API是相同的,但它是正在更改的参数。次数也是可变的。我想使用AsyncRestTemplate,但我的主线程应该等到所有API调用成功完成。我还想处理每个API调用返回的响应。目前我正在使用RestTemplate。基本形式如下
List<String> listOfResponses = new ArrayList<String>();
for (Integer studentId : studentIdsList) {
String respBody;
try {
ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, requestEntity, String.class);
} catch (Exception ex) {
throw new ApplicationException("Exception while making Rest call.", ex);
}
respBody = requestEntity.getBody();
listOfResponses.add(respBody);
}
在这种情况下,如何实现AsyncRestTemplate
# 1 楼答案
如果对您来说可行,您可以使用Java 8流API:
此代码基本上将执行两件事:
更新:同意@Didier L-当您需要执行大量请求时,此解决方案可能无法正常工作。以下是更新版本:
# 2 楼答案
使用
AsyncRestTemplate
(实际上是任何异步API)的主要思想是第一次发送所有请求,保留相应的未来,然后在第二次处理所有响应。只需使用2个循环即可完成此操作:注意:如果需要将响应与原始请求配对,可以使用映射或请求+响应对象列表替换未来列表
我还注意到你的问题中没有使用
studentId
# 3 楼答案
这里是我想建议的另一个解决方案,它使用Spring的RestTemplate而不是AsyncRestTemplate。它还使用Java8 CompletableFuture
我更喜欢这个解决方案,因为我可以链接我想要的任意多的业务逻辑,而不必依赖Spring内部的异步发送。 显然,您可以进一步清理代码,我现在还没有太多的注意到这一点