由于业务中会进行多次接口请求,每次以串行方式请求会导致整个流程耗时边长。采用并发请求方式,并在最终聚合请求结果。可以大大缩短整个运行时长
@GetMapping("/test")
public ResponseMessage test(){
long t1 = System.currentTimeMillis();
List<String> results = new ArrayList<>();
List<String> list = Lists.newArrayList(
"http://localhost:8080/api/ceshi?id=1",
"http://localhost:8080/api/ceshi?id=2",
"http://localhost:8080/api/ceshi?id=3",
"http://localhost:8080/api/ceshi?id=4",
"http://localhost:8080/api/ceshi?id=5"
);
List<CompletableFuture<String>> futureTasks = new ArrayList<>(list.size());
for (String url : list) {
futureTasks.add(CompletableFuture.supplyAsync(() -> HttpUtil.get(url)));
}
for (CompletableFuture<String> futureTask : futureTasks) {
results.add(futureTask.join());
}
System.out.println(results);
long t2 = System.currentTimeMillis();
return ResponseMessage.success("耗时:"+ (t2-t1));
}