背景:在 controller 里并发调用三个其他服务接口,然后组装数据返回
@RequestMapping({"/flow/test"})
@ResponseBody
public String hello(HttpServletRequest request, @RequestParam(name = "tabId", required = false) Integer tabId) {
ExecutorService servicepool = Executors.newFixedThreadPool(10);
ExecutorCompletionService<String> service = new ExecutorCompletionService<String>(servicepool);
service.submit(() -> {
String uri = "http://localhost/api/user/info";
return HttpHelper.getRequest(uri, 300);
});
service.submit(() -> {
String uri = "http://localhost/api/news/list";
return HttpHelper.getRequest(uri, 300);
});
service.submit(() -> {
String uri = "http://localhost/api/flow/list";
return HttpHelper.getRequest(uri, 300);
});
List<String> curlResult = new ArrayList<>();
try {
servicepool.shutdown();
for (int i = 0; i < 3; i++) {
curlResult.add(service.take().get());
}
} catch (Exception ex) {
}
//TODO 组装数据
return JSON.toJSON(curlResult).toString();
}
问题:这样写可不可以?有什么弊端或者是有什么需要注意的地方,请大佬们指点一二